【问题标题】:Understanding how angular ng-repeat works with arrays了解角度 ng-repeat 如何与数组一起使用
【发布时间】:2015-12-02 21:07:00
【问题描述】:

亲爱的,我正在经历question,其中接受的答案建议使用带有 ng-repeat 的过滤器,它基本上使用 lodash 的 chunk 函数和 memoize 函数。作者描述使用memoize的原因如下

许多人更喜欢在视图中使用过滤器来完成此操作。这是可能的,但只能用于显示目的!如果您在此过滤视图中添加输入,则会导致可以解决但不美观或不可靠的问题。

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

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

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

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

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

lodash 有一个memoize 函数,而最新版本的lodash 还包括一个chunk 函数,所以我们可以非常简单地使用npm 模块创建这个过滤器并使用browserify 编译脚本或webpack.

谁能帮助我了解 memoize 在这里如何使用 ng-repeat 和 filter 运行?

【问题讨论】:

  • 那么问题是什么?
  • 谁能帮助我了解 memoize 在这里如何使用 ng-repeat 和 filter 发挥作用?

标签: javascript angularjs lodash


【解决方案1】:

我猜当你以角度调用 .filter('chunk', func) 时,它就像你指示它以下内容:

” 每当应用名为“块”的过滤器时,调用我的第二个参数返回的函数并传递它:

param1: the array on which it was applied.
param2: the part after ':' 

"

据我了解,无论如何过滤器都会运行至少两次。

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

通过使用 memoize 代理块,就像我们说:“块的输出是确定性的(对于相同的参数总是相同的),所以缓存它。”

这意味着:

  • 过滤器将至少被调用两次。
  • memoize 将在过滤器运行时被调用多次。
  • 但块只会被调用一次。
  • 【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多