如果我希望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的无限循环。
这怎么做得最好?谢谢!
答案 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中使用它。更新后,它会将更改后的数据副本分配回原始数据。