我在angular中设置了一个名为'items'的json字符串。每个项目都包含一个字段ID数组。通过匹配字段ID,它使用单独的“字段”json字符串为字段提取信息。
{
"data": [
{
"id": "1",
"title": "Item 1",
"fields": [
1,
1
]
},
{
"id": "2",
"title": "Item 2",
"fields": [
1,
3
]
},
{
"id": 3,
"title": "fsdfs"
}
]
}
您可以复制或删除项目或字段,这将修改'items'json。
除非我复制一个项目(及其字段),然后选择删除该特定项目的字段,否则一切正常。
它会删除复制的项目和原始项目的字段。
Plunker -
http://plnkr.co/edit/hN8tQiBMBhQ1jwmPiZp3?p=preview
我读过使用'track by'有助于将每个项目编入索引,并防止重复键,但这似乎没有效果。
感谢任何帮助,谢谢
修改
感谢Eric McCormick这个,使用angular.copy和array.push解决了这个问题。
而不是 -
$scope.copyItem = function (index) {
items.data.push({
id: $scope.items.data.length + 1,
title: items.data[index].title,
fields: items.data[index].fields
});
}
这很有效 -
$scope.copyItem = function (index) {
items.data.push(angular.copy(items.data[index]));
}
答案 0 :(得分:5)
我建议使用angular.copy,它是源对象的“深层副本”。这是来源的唯一对象。
它可能看起来有点违反直觉,但是直接引用(当您观察时)与原始对象交互。如果你在DOM中实例化后inspect the element's scope,你可以看到有一个 $ id 属性分配给内存中的对象。基本上,通过使用 angular.copy(source,destination),可以确保复制所有属性/值并拥有唯一对象。
示例:
//inside the controller, a function to instantiate new copy of selected object
this.selectItem = function(item){
var copyOfItem = angular.copy(item);
//new item with same properties and values but unique object!
}
Egghead.io有a video on angular.copy。