Angular 2神秘地修改具有相同值的对象内的所有子嵌套类似对象

时间:2016-04-18 22:05:08

标签: javascript angular local-storage

https://plnkr.co/edit/YyTPVQ?p=preview的示例中可以看出(一旦加载,应用程序点击左栏上的任何名称)

如果我修改任何用户的比例,它也会修改其他用户。

不要问我为什么但是,我通过删除所有.map和.js文件设法修复它,将修复程序提交给git,今天早上醒来,现在它不再工作(这听起来很奇妙!)https://github.com/thurft/appraisal

我的问题如下 employees.component.ts处理employees.component.html的逻辑

当我对某个问题进行评分时,它会修改所有 this.employee 的相同问题,而不是仅针对 this.selectedEmployee进行修改。这将被触发updateQuestionRequest(question)并且有一个console.log(this.employees)来显示正在修改的对象。

我决不修改this.employees数组,所以Angular以某种方式知道它需要修改数组中的对象。但它也修改了该数组中具有相同问题的所有对象。

问题/问题是:如何在selectedEmployee OBJ中保存selectedEmployee评级问题,而不是在所有员工OBJ中保存的值?

我无法判断Angular上是否存在错误,或者我的代码中存在问题,因为有时候它会起作用,有时候它没有并且没有一致性。

2 个答案:

答案 0 :(得分:1)

您必须克隆TECHNICALQUESTIONS否则所有员工将共享相同的参考:

employee[i].technicalQuestions = TECHNICALQUESTIONS.map(_=>{return Object.assign({}, _)};);

答案 1 :(得分:0)

由于Chrome尚未实现,Object.assign解决方法是创建一个新的json文件以强制创建新对象employee[i].technicalQuestions = JSON.parse(JSON.stringify(TECHNICALQUESTIONS));