javascript - 即使过滤器参数未更改,也会调用 Angular 过滤器

标签 javascript html angularjs angular1.6

我们有一个 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> 上时,甚至会调用过滤器标签。

到底是什么?我们能做些什么来阻止它被如此频繁地调用?

最佳答案

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

var digestCount = 0;

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

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

关于javascript - 即使过滤器参数未更改,也会调用 Angular 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43531253/

相关文章:

javascript - 在html中沿着可点击网格的边界放置数字

javascript - 如何将 div 标签放在 Canvas 上

javascript - 没有依赖项的 Angularjs 注入(inject)器错误

javascript - Angular js 使用模板 url 将模板加载到 templateCache 中

javascript - Angular 1.5 : pass attribute to component

javascript - 逗号分隔字符串的正则表达式(2 个字符串以逗号分隔)

php - 我的 jQuery 和 PHP 对同一件事给出不同的结果?

javascript - 在 iFrame 上隐藏 Div(同一域内)

javascript - Jquery 和 JS 适用于 DOM 而不是 onLoad

javascript - HTML5/Javascript 图像加载方法 & 传递给变量