javascript - AngularJs 过滤器

标签 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) 正在记录两次。我需要确保我的过滤器逻辑不会在任何地方重复,因为进一步我需要比较两个数组(一个被过滤,另一个数组对它们之间的差异进行着色,例如缺少单词或单词不匹配)。

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

最佳答案

您是在 DOM 中通过管道使用过滤器,还是在 Controller 中使用它?在 DOM 中使用过滤器总是比在 Controller 中使用过滤器“慢”,但更重要的是(可能与您的情况有关)DOM 过滤器总是运行两次。

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

关于javascript - AngularJs 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39230379/

相关文章:

javascript - AngularJS ng- Controller 不工作

AngularJS 复选框过滤器

javascript - 在AngularJS中,为什么$emit事件可以被取消,而$broadcast事件却不能?

javascript - angularjs 选中复选框时隐藏具有特定类的对象

javascript - 一个数组还是多个? (哈希表)

javascript - 数据库写入的 block 序列化

javascript - Angular JS 过滤器 2 值?

javascript - AngularJS 过滤器根据表达式动态应用

javascript - 在 javascript 中,将自定义事件附加到文档本身是不好的做法吗?

javascript - 如何在 Chrome 插件中使用外部 ajax 响应