AngularJs 过滤器
AngularJs 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 中使用过滤器,还是在控制器中使用它?在 DOM 中使用过滤器将始终比在控制器中使用过滤器 "slower",但更重要的是(并且可能与您的情况有关)DOM 过滤器总是 运行 两次。
来源:https://toddmotto.com/use-controller-filters-to-prevent-digest-performance-issues/
我正在编写一个模块,使用自定义过滤器,我注意到一些奇怪的事情。如果我在过滤器中使用 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 中使用过滤器,还是在控制器中使用它?在 DOM 中使用过滤器将始终比在控制器中使用过滤器 "slower",但更重要的是(并且可能与您的情况有关)DOM 过滤器总是 运行 两次。
来源:https://toddmotto.com/use-controller-filters-to-prevent-digest-performance-issues/