[英]Understanding how angular ng-repeat works with arrays
亲爱的所有我正在经历一个问题 ,其中接受的答案建议使用具有ng-repeat的过滤器,其基本上使用lodash的块函数以及memoize函数。 作者描述了使用memoize的原因如下
许多人更喜欢在带有过滤器的视图中完成此操作。 这是可能的,但只应用于显示目的! 如果在此筛选视图中添加输入,则会导致可以解决的问题,但不是很漂亮或可靠。
这个过滤器的问题是它每次都返回新的嵌套数组.Angular正在观察过滤器的返回值。
过滤器第一次运行时,Angular知道该值,然后再次运行它以确保它完成更改。 如果两个值相同,则循环结束。
如果没有,过滤器将一次又一次地触发,直到它们相同,或者Angular意识到并且正在发生无限的摘要循环并关闭。
因为Angular之前没有跟踪新的嵌套数组/对象,所以它总是看到返回值与前一个不同。
要修复这些“不稳定”过滤器,必须将过滤器包装在
memoize
函数中。
lodash
有memoize
功能和最新版lodash
还包括一chunk
功能,所以我们可以很容易通过创建此过滤器npm
模块和编译的脚本browserify
或webpack
。
任何人都可以帮助我理解memoize在这里使用ng-repeat和过滤器的功能吗?
我想当你以角度调用.filter('chunk',func)时,就像你指示它一样:
根据我的理解,在任何情况下,过滤器将至少运行两次。
问题是每次调用块时它都会访问数组。 即使没有对它进行实际修改,过滤器也会再次运行以执行修改检查,因此它将再次调用chunk等。
通过使用memoize接收chunk,就像我们说的那样:“chunk的输出是确定性的(对于相同的params总是相同的),所以缓存它。”
这意味着:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.