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 2

1 ответ:

Вы используете фильтр в DOM с трубопроводом, или вы используете его в контроллере? Использование фильтра в DOM всегда будет "медленнее", чем использование одного в контроллере, но что более важно (и, возможно, связано с вашим случаем), фильтры DOM всегда выполняются дважды.

Источник: https://toddmotto.com/use-controller-filters-to-prevent-digest-performance-issues/