【问题标题】:AngularJS filter infinite digestAngularJS过滤无限摘要
【发布时间】:2015-01-03 20:20:06
【问题描述】:

我有一个过滤器:

filter('keys', [function() {
  return function(obj) {
    if (angular.isObject(obj)) {
      return Object.keys(obj);
    }
  };
}])

这个过滤器然后与一个对象一起使用来获取键。我是这样使用它的:

<directive data="{test: 1, test1: 2, test2: 3} | keys"></directive>

我得到一个无限的摘要错误。为什么?

【问题讨论】:

  • 这段代码的问题很难理解。 directive 这里是什么?
  • 一个 AngularJS 指令或任何元素。
  • 你能在 plunker 中复制问题
  • Angular 不会在每次评估表达式时创建新的对象实例吗?你在那个表情上有$watch吗?
  • @PavelHoral 这似乎并不那么明显。在视图中定义对象表达式不会产生您提到的任何这些效果。你可以自己试试。它也必须由其他东西贡献。这里有一个例子plnkr.co/edit/HRUoze2GvMVsWTwGTnr6?p=preview

标签: javascript html angularjs angularjs-directive angularjs-filter


【解决方案1】:

我的猜测是每个循环都会创建一个全新的要过滤的对象。您的过滤器会在视图中创建一个新对象,这反过来会触发摘要在新对象上使用过滤器,依此类推。

您应该在控制器中定义您的对象,以防止在每个循环中在视图中创建新对象。

最好在控制器中使用您的过滤器,这将防止在每个循环中使用过滤器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多