Я создал фильтр для сортировки вопросов по категориям.Угловой фильтр работает больше, чем ожидалось
Я пытаюсь выяснить, почему мой угловой фильтр работает больше, чем входное значение.
Первый выпуск: Фильтр выполняется до вопросов заселены:
Затем запустите еще раз, когда существует объект вопрос:
Второй выпуск: В моей директиве scope.questions
массив содержит только один код stion, но фильтр работает 6 раз? Почему это?
Директива HTML фрагмент кода:
<div class="category-filter">
<div ng-repeat="(k, v) in catfilters" class="question">
<input type="checkbox" ng-init="checked=true" ng-model="catfilters[k]">{{ k }}
</div>
</div>
Loop:
<div class="question-category">
<li ng-repeat="q in questions | bycategory:catfilters" class="question">
{{q.question.category.category}}
</li>
</div>
Директива JS: фрагмент кода
scope.questions = args;
console.log(scope.questions.length); //Length == 1
/*
Dynamically add question filters
*/
scope.questions.forEach(function (k, v) {
scope.catfilters[k.question.category.category] = true;
});
Фильтр:
filter('bycategory', function() {
return function (questions, catfilterObj) {
console.log('Q', questions); // Called 6 times
var items = {
categories: catfilterObj,
out: []
};
angular.forEach(questions, function (value, key) {
if (this.categories[value.question.cat_id] === true) {
this.out.push(value);
}
}, items);
return items.out;
};
}
То, что вы видите, это природа, как работают угловые дайджесты. Они выполняются как минимум 2 раза, пока область не станет стабильной, и больше, если изменения в области видимости будут обнаружены из дайджеста. – charlietfl
@charlietfl есть ли способ сделать это более эффективным? 6 вызовов довольно хардкор для массива, содержащего один объект – Growler
Является ли это причиной проблем с производительностью? – charlietfl