【发布时间】:2015-06-04 17:49:57
【问题描述】:
我有一个简单的 ngRepeat,如下所示:
<some-element ng-repeat="singleRecord in arrayOfRecords track by singleRecord.id">
<!-- stuff -->
</some-element>
arrayOfRecords 是从服务器更新的,可能包含新数据。
ngRepeat 的track by 功能可以判断何时将新元素添加到数组中并自动更新 DOM 而无需更改现有元素。当有新数据进入或旧数据被删除时,我想挂钩该代码并执行回调函数。是否可以通过 Angular 轻松做到这一点?
据我了解,有一个$$watchers 会在某些变量发生更改时触发回调,但我不知道如何破解它。这是正确的方向吗?
注意:我知道我可以手动保存arrayOfRecords,并在我获取它们时将其与新值进行比较以查看发生了什么变化。但是,由于 Angular 已经提供了具有此逻辑的 track by 功能,如果我可以让 Angular 在从数组中添加或删除元素时自动触发事件回调,那就太好了。复制 Angular 中已经存在的这种逻辑是没有意义的。
【问题讨论】:
-
很难检查对象是否发生了变化?
-
你的意思是
$scope.$watchCollection(..)?track by什么都想不通。 -
@Claies 我认为你误解了(或我)。据我了解,该问题与您提到的所有内容无关:)。为了简化 OP 想知道 array1 - array2 之间的差异可能是为了一些逻辑......所以 OP 所说的角度是在
track by逻辑中计算出来的,所以我可以使用类似内置的东西,它给了我没有我的 2 个列表之间的差异必须编写任何代码。 -
@Claies 这是我相信的 OP 思想的方法,或者换句话说
he wants to know when angular detects the change and updates the DOM--> 当 angular 在 刷新整个列表时发现何时删除/添加项目时 它是否可以通知我,以便我知道哪些所有项目都是唯一的,并且我可以在该唯一项目列表上做一些事情(我可以避免编写 Diffing 逻辑)。无论如何,这就是我解释它的方式。 OP应该能够澄清。 -
我想你现在明白我的问题了——我对
ngRepeat的track by如何跟踪模型的有效更改很感兴趣(类比:电工如何拔出干墙) .您提供的链接讨论了 Angular 如何跟踪更改,但没有讨论它如何知道集合中哪些元素有效地更改了。我相信我已经对 Angular 的那一部分有足够的了解,知道这不是我想要的。无论如何,谢谢你试图理解。我意识到这可能不是一个常见问题,因为大多数人只是不关心优化。
标签: javascript angularjs angularjs-ng-repeat ng-repeat angularjs-track-by