ng-repeat - 对象的副本而不是直接引用

时间:2017-11-17 06:38:48

标签: javascript angularjs

如果我希望ng-repeat中的对象成为列表中实际对象的副本,我该怎么做?

例如:

<div ng-repeat="thing in model.things">
    <input ng-model="thing.field"/>
    <button> // clicking this button would update that thing </button>
</div>

如果我输入该输入字段,它将直接修改model.things中的对象。我想修改该东西的副本,然后在我点击更新按钮时只更新实际的副本。

我尝试过像model.getThings()那样的angular.copy()列表,但是当添加新的东西时会触发$ digest的无限循环。

这怎么做得最好?谢谢!

2 个答案:

答案 0 :(得分:0)

您可以在初始化时复制原始对象:

function YourController() {
    $scope.copyModel = angular.copy(model);
    // ...
}

在你的ng-repeat

中使用copyModel

答案 1 :(得分:0)

我为您正在寻找的解决方案创建了一个plnkr。请在此处找到https://plnkr.co/edit/MgDroW3e6hqkg2LNAtik?p=preview

<强>控制器

$scope.data = [
  {name: 'Perry'},
  {name: 'Sam'},
  {name: 'Ron'}
];
$scope.cloned = angular.copy($scope.data);
$scope.update = function () {
  $scope.data = angular.copy($scope.cloned);
}

它克隆实际数据并在ng-repeat中使用它。更新后,它会将更改后的数据副本分配回原始数据。