我遇到过一个场景,我经常需要更新一个大型数据集,最终将在表格中呈现给分析应用程序。当我知道数据已经更新并传递新数据时,当我可以发出事件时,在给定集合大小的情况下将观察者保持在数据上似乎非常低效。
我已经读过在Angular应用程序中使用事件发射器通常是反模式的,但似乎没有一个可靠的解释为什么。
此处触发更新的最佳做法是什么?
答案 0 :(得分:0)
没有元理想的答案,我们需要查看您的HTML以了解这些观察者的注册方式。
基本上,如果你的表是这样的
<tr ng-repeat="line in table.lines">
<td ng-repeat="column in line.columns">
<!-- many watchers such as -->
{{column.value}}
</td>
</tr>
让我们说你不想看每个column.value
,直到你知道它已经改变,然后你可以绑定 - 一旦该值(需要角度1.3+或外部bindonce库)
<tr ng-repeat="line in table.lines">
<td ng-repeat="column in line.columns track by column.timestamp">
<!-- bind data once -->
{{::column.value}}
</td>
</tr>
当该单元格值更改时,更新其时间戳。只有在这种情况下,trackBy才会重置td
内容。
然而,每次更改值时都需要更换DOM单元。以仅刷新单元格值为基准,但在每个单元格上使用观察者(如果观察者足够快,这并不总是问题,即没有jquery的短同步代码等)。