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



如果我希望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循环。

如何最好地做到这一点?谢谢!

我已经为您正在寻找的解决方案创建了一个 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中使用它。更新后,它会将更改数据的副本分配回原始数据。

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

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

并在您的ng重复中使用复制模型

最新更新