0

我们有一个 Angular 1.6 过滤器,它一直在触发。

HTML 看起来像:

  <div class="row" ng-repeat="(promptId, q) in (categoryDoubleFiltered = (categoryFiltered | 
    custom:searchText:selectAllCheckbox:answeredCheckbox))">

所以有 3 个参数被传递给过滤器 =>

searchText:selectAllCheckbox:answeredCheckbox

这是过滤器:

app.filter('custom', function () {

  return function (input, search, selectAllCheckbox, selectAnswered) {

       console.log('filter is invoked!');
       // do our filtering thing

      // return some subset of input

   };

});

在我们的 (promptId, q) 键/值的 HTML 中,我们有标准ng-modelng-click东西。但是我不明白为什么应该调用过滤器,除非过滤器的输入之一发生变化!?当我们将鼠标悬停在<a>标签上时,甚至会调用过滤器。

有没有搞错?我们能做些什么来阻止它被如此称呼?

4

1 回答 1

1

除非您使用原语,否则过滤器将在每个 $digest 中触发多次。在这种情况下,您似乎有无限的摘要正在运行。您可以使用它来验证您是否确实在运行不间断摘要:

var digestCount = 0;

$rootScope.$watch(function() {
  digestCount++;
  console.log(digestCount);
});

我建议您追踪无限摘要的原因并修复它以使您的过滤器正常工作。plunkr 或 fiddle 也可以帮助我们诊断。

于 2017-04-20T23:14:12.617 回答