数组和角度复制的不同范围

时间:2014-01-18 01:06:34

标签: javascript angularjs angularjs-scope

从这个plunkr更容易看到问题: http://plnkr.co/edit/EFZCAXWFui0foMbfZkPb?p=preview

单击“单击以添加第一个”和“单击以添加第二个”,然后您可以单击“锁定”图标以查看某些项目似乎具有相同的范围(或相同的ng模型)。 / p>

然后单击“单击以添加第三个”此操作执行angular.copy,它与另一个共享相同的范围2.为什么会这样?

如何区分范围,以便每个'锁定'图标仅适用于自身,而不是其他项目?

1 个答案:

答案 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));