Angularjs:防止绑定

时间:2014-08-25 22:52:41

标签: angularjs binding

在这种情况下如何防止绑定:

$scope.data = [{i:0, a:0}, {i:0, a:0}, {i:0, a:0}];
$scope.twoofthedata = [$scope.data, $scope.data];

所以$ scope.twoofthedata [0]独立于$ scope.twoofthedata [1]

plunker

1 个答案:

答案 0 :(得分:3)

在JavaScript中,操纵对象by reference。这不是Angular绑定问题。

然而,Angular允许您通过angular.copy方法绕过此语言约束,该方法会创建给定对象的深层副本。

$scope.data = [{i:0, a:0}, {i:0, a:0}, {i:0, a:0}];

// Manually call `angular.copy` on each member
$scope.twoofthedata = [
  angular.copy($scope.data),
  angular.copy($scope.data)
];

// Cleaner version (using `Array.prototype.map`)
$scope.twoofthedata = [$scope.data, $scope.data].map(angular.copy);

但是应该警告你,深拷贝可能非常昂贵,因此只有在真正需要时才能使用。

仅供参考:如果您遇到类似问题但未使用Angular,则可以使用Lodash,它也有deep clone method