AngularJs Фильтры
Я пишу модуль, используя пользовательский фильтр, и я заметил кое-что странное. если я использую 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)
регистрируется дважды. Мне нужно убедиться, что моя логика фильтра нигде не будет дублироваться, так как далее мне нужно сравнить два массива (тот, который фильтруется, и еще один, чтобы окрасить различия между ними, например, пропущенное слово или несоответствие слов).
[править] Мне указывают, что мой вопрос является дубликатом этого Тем не менее, первоначальный вопрос не дает ответа, Как избежать этой проблемы, но я считаю, что @defaultcheckbox дал удовлетворительный ответ.
1 ответ:
Вы используете фильтр в DOM с трубопроводом, или вы используете его в контроллере? Использование фильтра в DOM всегда будет "медленнее", чем использование одного в контроллере, но что более важно (и, возможно, связано с вашим случаем), фильтры DOM всегда выполняются дважды.
Источник: https://toddmotto.com/use-controller-filters-to-prevent-digest-performance-issues/