angular - 更新复制对象中的值正在影响角度 5 中的所有其他复制对象值
问题描述
在组件中,我进行了 http 调用以从后端获取所有受让人。
零件 :-
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。
请帮帮我。提前致谢。
解决方案
let asignees1 = this.assignees.slice(0);
克隆数组但是里面的对象引用了原始数组中的对象,你需要得到对象数组的深层克隆,你可以使用这个简单的技巧来做到这一点:
let asignees1 = JSON.parse(JSON.stringify(this.assignees));
然后,您将克隆没有对原始数组的引用的数组。
推荐阅读
- vba - 使用权。如何在另一个表单上创建记录并在 CBO 中选择该记录?
- python - 使用 getattrs() 访问 Foregin Key 值
- excel - vba 将 xltm 文件保存为 xlsb 文件
- java - 在黄瓜/硒中,当我想将多个参数作为字符串传递时,我遇到了问题
- dart - 失去焦点时将光标移动到 TextFormField 的开头
- fancybox - Fancybox 许可证是如何使用的?
- excel - 带有 Excel VBA 的设备 ID
- python-2.7 - Python 无法使用 sys.path.append 导入 .so
- reactjs - 在控制台反应路由器中收到奇怪的警告
- c# - 根据 Controller 类型和 Acton 名称构建路由模式