发表于: 2019-10-18 22:41:21

1 856


今天完成的事情:

完成师弟路由问题,以及自己的搜索时候页面跟这跳转
明天计划的事情:

请假
遇到的问题:

当搜索的时候页面跳转要跟着一起跳转

解决代码



 this.aRoute.queryParamMap.subscribe(a => {
      console.log(this.aRoute.queryParamMap)
      this.getRight(a);
      console.log(a);
      this.paGe= a;
      console.log(this.paGe);

    });

通过这代码我们可以直接获取到 getRight(a)里面的参数 这里面的参数是直接跳转到服务我写好的接口调用后台数据让它返回的值


pageIndexChange() {

    this.params = {
      page: this.page
    };
    //Object对象拼接
    this.paGe= JSON.parse(JSON.stringify(this.paGe))
    this.params = Object.assignthis.paGe.params,this.params);


    console.log(this.params);
    this.route.navigate(["/list/right"], {
      queryParams: this.params,
    });
    this.getRight();

  };

然后通过分页跳转的参数和ULR进行拼接。

这里要注意下 

因为是把值直接传递给ULR上是因为URL已经获取到我后台数据里面的值了,而ULR里面的对象时不能改变的 所以我这需要重新赋值

this.paGe= JSON.parse(JSON.stringify(this.paGe))

相遇在内存里面重新开辟一个空间放这个值对之前ULR是没有影响的 所以就可以直接搜索获取值然后点击分页还是搜索的值


收获:

Object.assign()的使用


就是往我们创建的对象 加值,如果有重复的值就后面的把前面的覆盖掉改变对象里面元素的值

const o1 = { a: 1 };

const o2 = { b: 2 };

const o3 = { c: 3 };

const obj = Object.assign(o1, o2, o3);

console.log(obj); // { a: 1, b: 2, c: 3 }

console.log(o1);  // { a: 1, b: 2, c: 3 }, 注意目标对象自身也会改变。

其实就是对象的拷贝o1就是目标对象后面的是源对象后面的属性等会拷贝到目标对象



 写法

const returnedTarget = Object.assign(target, source);

这里要注意下

target

目标对象。

sources

源对象。

也就是说  前面的这个值 是目标更改前面对象值的参数,而后面的值如果没有就赋值给前面的 如果相同的就直接覆盖前面值本来的值。


百度解释:

如果目标对象中的属性具有相同的键,则属性将被源对象中的属性覆盖。后面的源对象的属性将类似地覆盖前面的源对象的属性。

Object.assign 方法只会拷贝源对象自身的并且可枚举的属性到目标对象。该方法使用源对象的[[Get]]和目标对象的[[Set]],所以它会调用相关 getter setter。因此,它分配属性,而不仅仅是复制或定义新的属性。如果合并源包含getter,这可能使其不适合将新属性合并到原型中。为了将属性定义(包括其可枚举性)复制到原型,应使用Object.getOwnPropertyDescriptor()Object.defineProperty() 

String类型和 Symbol 类型的属性都会被拷贝。

在出现错误的情况下,例如,如果属性不可写,会引发TypeError,如果在引发错误之前添加了任何属性,则可以更改target对象。

注意,Object.assign 不会在那些source对象值为 null  undefined 的时候抛出错误。

Object.assign()对象的拷贝

 

针对深拷贝需要使用其他办法因为 Object.assign()拷贝的是属性值假如源对象的属性值是一个对象的引用那么它也只指向那个引用

let obj1 = { a: 0 , b: { c: 0}}; 

let obj2 = Object.assign({}, obj1); 

console.log(JSON.stringify(obj2)); // { a: 0, b: { c: 0}} 

obj1.a = 1; 

console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 0}} 

console.log(JSON.stringify(obj2)); // { a: 0, b: { c: 0}} 

obj2.a = 2; 

console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 0}} 

console.log(JSON.stringify(obj2)); // { a: 2, b: { c: 0}}

 

obj2.b.c = 3; 

console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 3}} 

console.log(JSON.stringify(obj2)); // { a: 2, b: { c: 3}} 

最后一次赋值的时候b是值是对象的引用只要修改任意一个其他的也会受影响

// Deep Clone (深拷贝)

obj1 = { a: 0 , b: { c: 0}}; 

let obj3 = JSON.parse(JSON.stringify(obj1)); 

obj1.a = 4; 

obj1.b.c = 4; 

console.log(JSON.stringify(obj3)); // { a: 0, b: { c: 0}}

这里要说明下  拷贝对象时不改变原来的数据的。而合并对象时会改变原来对象的属性值的。


返回列表 返回列表
评论

    分享到