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

Ann*_*e C 2 javascript angularjs angularjs-scope

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

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

然后单击"单击以添加第三个"此操作执行angular.copy,它不与其他共享相同的范围2.为什么?

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

Pas*_*ert 5

在这一行:

var row = {"groupname":Math.floor(Math.random() * 9999999) + 1};
Run Code Online (Sandbox Code Playgroud)

您创建一个新对象,创建一个存储在该变量中的此对象的引用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));
Run Code Online (Sandbox Code Playgroud)