实现多个过滤器AngularJS的最佳方法是什么?

DJC*_*DJC 5 javascript angularjs

我有多个过滤器在ng-repeat上工作正常.但是,代码似乎没有多长时间实际操作集合上的过滤器,我想知道是否有更好的方法.

这是一个示例过滤器 - 这一点我没关系(除非有人有任何建议) - 它们都遵循类似的结构:

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;
    }
})
Run Code Online (Sandbox Code Playgroud)

正如我所说 - 其中有几个.然后,在我的ng-repeat上,我实现它们(这似乎很难维护并且过长,并且会欣赏有关任何更好技术的信息):

任务-的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>
Run Code Online (Sandbox Code Playgroud)

根据这里涉及的滚动量来判断,我想你可以通过上面的代码看到我的问题.为了获得视图中的任务长度(也分为已完成,正在进行等),我必须再次列出所有过滤器.

有没有更好的方法来实现这些过滤器?

我还担心在阅读本文之后我不理解有状态和非有效过滤器之间的区别 - 以上过滤器是针对性能进行了优化的吗?

Mar*_*coS 0

我建议你使用javascript函数filter(),它非常强大:

.filter('taskClient', function() {
  return function(items, clientId) {
    if (!clientId) { return items; }
    return items.filter(function(item) {
      return item.client && item.client.id === clientId;
    });
  }
})
Run Code Online (Sandbox Code Playgroud)