我有两个对象集合。其中一个具有原始值的对象,另一个具有对象值。
我需要在动态列的html表中呈现集合。我已经为此做了一个过滤器,但是它可以用于原始对象值的收集,并导致无限的$ digest循环(参见控制台)用于对象的集合。
这是JSBin
据我所知,问题在于每次都会因为angular.copy而返回一个新对象。但为什么它适用于原始价值?
我有什么想法可以解决这个问题吗?
答案 0 :(得分:1)
它适用于基元的原因是JS按值传递基元,而不是通过引用。问题可以通过lodash(_ library)memoize函数来解决。 This page使用memoize详细说明了确切的问题和解决方案。
答案 1 :(得分:0)
我解决了我的问题,但因为有许多类似的问题没有答案,我决定发表我的答案。
解决问题的关键是ng-repeat既不使用$ watch也不使用$ watch和Equality。它使用$ watchCollection来收集集合=)。在我的情况下,当过滤器返回具有原始值的新复制对象时,$ watchCollection不会触发(在这种情况下标准的$ watch),所以我避免了无限的$ digest循环。但是如果具有对象值$ watchCollection的对象触发无限$ digest循环($ watch with Equality = true则不会)。
这是jsbin