Angular:更新一次性绑定数据

时间:2016-05-19 09:37:30

标签: javascript angularjs

假设你的指令控制器中有一个像

这样的数组
this.items = [
     {active: true, title: 'bar', ...},
     {active: false, title: 'foo', ...},
     ...
];

在模板中,您可视化它

<ol>
    <li ng-repeat="item in ::items" ng-class="...">{{item.title}}</li>
</ol>

注意::确保它只执行一次,因为在ng-repeat准备就绪后,该指令也会注入一些DOM元素。

DEMO

但是,在某个时间点,应用会收到更新

this.items = updatedItems;

除了每个项目的某些属性(active可能会从true更改为false之外),更新与原始数据相同。现在,由于::,更新不会执行任何操作。现在我可以遍历每个项目

updatedItems.forEach((item, index) => {
    $scope.items[index].active = item.active;                
    $scope.items[index].title = item.title;
    ...
});

所以问题是这个问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

拥有数据集和数据绑定的副本,而不是实际的数据集,您希望模板忽略的更改,所有这些都适用于特定条件。

然后,当您希望更新数据时,您只需更新对复制数据的必要更改,即可反映更改。我理解,这确实增加了获取数据副本的开销,但是一个简单的解决方案通常可以避免以后的大量工作,特别是如果从团队的其他成员那里查看源代码。