У меня есть несколько фильтров, работающих нормально над ng-repeat. Тем не менее, код кажется излишне длинным для фактического действия фильтров на наборе, и мне интересно, есть ли лучший способ.Каков наилучший способ реализации нескольких фильтров AngularJS?
Вот пример фильтра - этот бит, я в порядке с (если кто не имеет никаких советов) - все они имеют сходную структуру:
app.js
.filter('taskClient', function() {
return function (items, clientId) {
if (!clientId) { return items; }
var filtered = [];
angular.forEach(items, function(item) {
if (item.client) {
if (item.client.id === clientId) {
filtered.push(item);
}
}
});
return filtered;
}
})
И, как Я сказал - их несколько. Затем, на мой нг-повторе, я реализую их так (это бит, который, кажется, трудно поддерживать и слишком долго, и был бы признателен за информацию о любых лучших методов):
задачи-index.html
<md-list-item icp-task-line ng-repeat="task in TasksCtrl.tasks | taskOwner: TasksCtrl.selectedUserFilter | taskClient: TasksCtrl.clientId | taskDepartment: TasksCtrl.departmentId | taskPriority: TasksCtrl.priority | taskWithClient: TasksCtrl.withClient | taskEndDate: TasksCtrl.endDate | filter: {progress: 0} | filter: searchText | orderBy: TasksCtrl.orderTasks" class="md-2-line"></md-list-item>
Судя по тому, как сильно прокручивается здесь, я думаю, вы можете увидеть мою проблему с вышеуказанным кодом. Для того, чтобы просмотреть длительность заданий (также разделенных на завершенные, в процессе и т. Д.), Я должен снова отобрать все фильтры.
Есть ли лучший способ реализовать эти фильтры?
Я также обеспокоен тем, что после прочтения this article Я не понимаю разницу между фильтрами состояния и нестатистическими - это вышеперечисленные фильтры, оптимизированные для производительности?
Хорошо, можете ли вы сказать нам, что у вас есть такой фильтр? То, что на самом деле пытается достичь в процессе отображения. Если будет продемонстрирована демонстрационная демонстрация, это было бы здорово. –
Краткое описание заключалось в том, чтобы иметь возможность фильтровать задачи по всем вышеперечисленным параметрам - вот почему они там. Однако при загрузке применяется только одна - остальные все через ng-модели используют флажки или выпадающие списки. – DJC
Проблема с использованием большого количества фильтров. Это связано с добавлением всех фильтров часов. Чем больше фильтров вы будете трубить, тем больше часов у вас будет, что приведет к снижению производительности. Я предлагаю вам либо реализовать единственный фильтр, который выполняет все тесты, либо один фильтр, который использует многочисленные методы заводских фильтров (удерживайте их в массиве, а в фильтре используйте «forEach»). Существует много шаблонов дизайна, которые вы можете использовать для этого. Важно следить за тем, чтобы количество скошенных фильтров было минимальным. – eitanfar