在AngularJs中更新大型数据集时,事件发射器vs $ watch

时间:2015-01-20 18:17:46

标签: javascript angularjs

我遇到过一个场景,我经常需要更新一个大型数据集,最终将在表格中呈现给分析应用程序。当我知道数据已经更新并传递新数据时,当我可以发出事件时,在给定集合大小的情况下将观察者保持在数据上似乎非常低效。

我已经读过在Angular应用程序中使用事件发射器通常是反模式的,但似乎没有一个可靠的解释为什么。

此处触发更新的最佳做法是什么?

1 个答案:

答案 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的短同步代码等)。