繁体   English   中英

了解角度ng-repeat如何与数组一起使用

[英]Understanding how angular ng-repeat works with arrays

亲爱的所有我正在经历一个问题 ,其中接受的答案建议使用具有ng-repeat的过滤器,其基本上使用lodash的块函数以及memoize函数。 作者描述了使用memoize的原因如下

许多人更喜欢在带有过滤器的视图中完成此操作。 这是可能的,但只应用于显示目的! 如果在此筛选视图中添加输入,则会导致可以解决的问题,但不是很漂亮或可靠。

这个过滤器的问题是它每次都返回新的嵌套数组.Angular正在观察过滤器的返回值。

过滤器第一次运行时,Angular知道该值,然后再次运行它以确保它完成更改。 如果两个值相同,则循环结束。

如果没有,过滤器将一次又一次地触发,直到它们相同,或者Angular意识到并且正在发生无限的摘要循环并关闭。

因为Angular之前没有跟踪新的嵌套数组/对象,所以它总是看到返回值与前一个不同。

要修复这些“不稳定”过滤器,必须将过滤器包装在memoize函数中。

lodashmemoize功能和最新版lodash还包括一chunk功能,所以我们可以很容易通过创建此过滤器npm模块和编译的脚本browserifywebpack

任何人都可以帮助我理解memoize在这里使用ng-repeat和过滤器的功能吗?

我想当你以角度调用.filter('chunk',func)时,就像你指示它一样:

  

根据我的理解,在任何情况下,过滤器将至少运行两次。

问题是每次调用块时它都会访问数组。 即使没有对它进行实际修改,过滤器也会再次运行以执行修改检查,因此它将再次调用chunk等。

通过使用memoize接收chunk,就像我们说的那样:“chunk的输出是确定性的(对于相同的params总是相同的),所以缓存它。”

这意味着:

  • 过滤器将被调用至少两次。
  • memoize将在运行过滤器时被调用多次。
  • 但是大块只会减少一次。

  • 暂无
    暂无

    声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

     
    粤ICP备18138465号  © 2020-2024 STACKOOM.COM