更新复制对象中的值会影响角度5中的所有其他复制对象值

时间:2018-06-06 15:58:34

标签: angular typescript angular5

在Component中,我进行了http调用以获取Backend的所有受理人。

组件: -

 const req = this.assigneeService.getAssignees();
    req.subscribe(
      data => {
        this.assignees = data['data'];
        // On response json will be like below
        [  
         {  
           name:"Name 3",
           id:1,
           status:"Not_Assigned"
         },
         {  
           name:"Archana",
           id:2,
           status:"Not_Assigned"
          }
        ]
       },
       err => {       
     }
 );

点击按钮,下面的函数将调用并创建说objectM。 现在假设我已经用相同的方法创建了2个相同的对象,例如objectM1和objectM2。

    public addObj1(): void {
        let asignees1 = this.assignees.slice(0);
        let objectM = new Module();
        objectM.assignees = asignees1;
      }

//onchange funtion where object is selected Object, action as string and id of user
    changeAssigneeState(object, action, assigneeId ) {

    for (let a of object.assignees) {
     if (a.id == assigneeId) {
        a.status = action;
      }
     }
    }

在objectM中更改id 1的assignee.status。它会影响具有相同id的objectM1和objectM2 assignee.status。

请帮帮我。提前谢谢。

3 个答案:

答案 0 :(得分:2)

let asignees1 = this.assignees.slice(0); clones数组对象里面有对原始数组中对象的引用,你需要深度克隆对象数组,你可以使用这个简单的技巧来做到: / p>

let asignees1 = JSON.parse(JSON.stringify(this.assignees));

然后你将克隆数组而不引用原始数组。

答案 1 :(得分:1)

深度克隆数组对象将帮助你解决这个问题,

ServerCredentials

答案 2 :(得分:0)

您也可以使用Object.assign()

执行此操作
newAssignes = [];

this.assignees.forEach((assignee, i) => {
    this.newAssignes[i] = Object.assign({}, assignee)
});

DEMO