AngularJs过滤器

时间:2016-08-30 14:33:42

标签: javascript angularjs angular-filters

我正在编写一个模块,使用自定义过滤器,我注意到一些奇怪的东西。如果我在过滤器中使用console.log(),它会将值记录两次,即使我只调用一次。有没有办法只记录一次?这是否意味着过滤器内的代码会被执行两次?

这是过滤器:

.filter('arrayToSentence', function($sce, $rootScope) {
    return function(array, index) {
        console.log(index);
        var i, word, sentence = '<span style="color:red;">';
        for (i = 0; i < array.length; i++) {
            if (i < array.length - 1) {
                sentence += array[i] + '&bnsp;';
            } else {
                sentence += array[i];
            }
        }
        sentence = sentence += '</span>'
        return $sce.sentence;
    }
})

console.log(index)正在记录两次。我需要确保我的过滤器逻辑不会在任何地方重复,因为我需要比较两个数组(一个被过滤,另一个用于对它们之间的差异进行着色,如缺少单词或单词不匹配)。 / p>

[编辑] 我向我指出,我的问题是重复的,this 然而,最初的问题并没有解决如何避免这个问题,但我相信@defaultcheckbox提供了一个令人满意的答案。

1 个答案:

答案 0 :(得分:5)

您是使用带有管道的DOM中的过滤器,还是在控制器中使用它?在DOM中使用过滤器总是会慢“#34;比在控制器中使用一个,但更重要的是(并且可能与你的情况有关)DOM过滤器总是运行两次。

来源:https://toddmotto.com/use-controller-filters-to-prevent-digest-performance-issues/