Angularjs:让绑定数据稍后更新的最佳方法是什么

时间:2014-01-22 09:37:48

标签: javascript angularjs angularjs-directive angularjs-ng-repeat

如果我有一个ng-repeat指令与我的初始数据绑定,

 <!-- list 1-->
 <li ng-repeat="data in datas">{{data.name}}</li>

我通过另一个ng-repeat和ng-model指令

更改数据
 <!-- list 2-->
 <li ng-repeat="data in datas">
     <input type="text" ng-model="data.name">
 </li>

以Angular的方式,任何方法都可以不立即列出1 ng-repeat数据刷新(点击“保存”按钮后)?

<button ng-click="save()">Save</button>

2 个答案:

答案 0 :(得分:1)

您似乎是通过将数组扩展一个元素来在datas中创建新项目?如果是这样,为什么不为表单使用不同的模型,并在单击保存按钮时将结果推送到数组data

类似地,在编辑项目时,克隆数组元素并使其成为结果表单的模型,然后在单击保存按钮时修改原始数组元素。

答案 1 :(得分:1)

您可以使用第二个(临时)克隆进行更改,并使用 angular.copy 将更改复制到实际对象。

The actual list:
<ul><li ng-repeat="item in items">
    {{item.name}} (id: {{item.id}})
</li></ul>

Edit the list:
<ul><li ng-repeat="item in tempCopy">
    <input type="text" ng-model="item.name" />
</li></ul>

<button ng-click="persistChanges()">Save</button>
<button ng-click="discardChanges()">Discard</button

在您的控制器中:

/* Persist the changes */
$scope.persistChanges  = function () {
    angular.copy($scope.model.tempCopy, $scope.model.items);
};
/* Discard the changes */
$scope.discardChanges  = function () {
    angular.copy($scope.model.items, $scope.model.tempCopy);
};

另请参阅此 short demo

最后,关于 angular.copy 的Angular文档中有一个类似的示例。