即使过滤器参数没有改变,也会调用角度过滤器

时间:2017-04-20 22:59:16

标签: javascript html angularjs angular1.6

我们有一个Angular 1.6过滤器,可以一直开火。

HTML看起来像:

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

因此有3个参数传递给filter =&gt;

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>标记上时,甚至会调用过滤器。

到底是什么?我们可以做些什么来阻止它被召唤这么多?

1 个答案:

答案 0 :(得分:1)

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

var digestCount = 0;

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

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