从这个plunkr更容易看到问题: http://plnkr.co/edit/EFZCAXWFui0foMbfZkPb?p=preview
单击“单击以添加第一个”和“单击以添加第二个”,然后您可以单击“锁定”图标以查看某些项目似乎具有相同的范围(或相同的ng模型)。 / p>
然后单击“单击以添加第三个”此操作执行angular.copy,它与另一个共享相同的范围2.为什么会这样?
如何区分范围,以便每个'锁定'图标仅适用于自身,而不是其他项目?
答案 0 :(得分:5)
在这一行:
var row = {"groupname":Math.floor(Math.random() * 9999999) + 1};
您创建了一个新对象和,您创建了一个对象,该对象存储在变量row
中。您只需将此引用(不是row
对象的副本)添加到数组中,因此两个数组中的元素都指向同一对象。
angular.copy创建数组的“深层副本”,因此将复制所有包含的对象,并且数组包含对这些新对象的引用。
如果要使用单独的对象,请在clickFirst函数中使用angular.copy复制对象:
var row = {"groupname":Math.floor(Math.random() * 9999999) + 1};
$scope.products1.push(row);
$scope.products2.push(angular.copy(row));