2015-09-28 99 views
1

我有模型是这样的:过滤模型angularjs

{ 
    "TaskDate": "2015-01-04T00:00:00", 
    "TimesheetList": [ 
     { 
      "WorkItemId":24, 
      "ProjectId":3, 
      "ProjectName":"Hello world", 
      "UserId":12, 
      "UserName":"Anatoliy Svetliakov", 
      "Date":"2015-01-04T22:00:00", 
      "Task":"#34 : New task test", 
      "TimeWorked":2, 
      "Note":null, 
      "InProgress":false 
     } 
    ] 
} 

该数据显示在与无限滚动表。我需要创建自定义过滤器,这将过滤数据Name和/或Data(from-to)。请给我一个想法如何做到这一点。我创建了函数,但它不起作用。

.filter('tsFilter', function() { 
       return function(model, filter) { 
        var filtered = []; 
        if (model != null) { 
         for (var i = 0; i < model.length; i++) { 
          filtered[i] = model[i]; 
         } 
        } 

        if (filter != null) { 
         if (filter.UserId != null) { 
          for (i = 0; i < filtered.length; i++) { 
           for (var j = 0; j < filtered[i]['List'].length; j++) { 
            if (filtered[i].List[j].UserId != filter.UserId) { 
             filtered.splice(j, 1); 
             j--; 
            } 
           } 
          } 
         } 
        } 

        for (i = 0; i < filtered.length; i++) { 
         if (filtered[i].List.length == 0) { 
          filtered.splice(i, 1); 
          i--; 
         } 
        } 
        return filtered; 
       }; 
      }) 

第67页上显示为:

<div class="timesheet-table-container"> 
    <table class="table-timesheet" id="table-body" infinite-scroll-immediate-check="false" infinite-scroll="loadMore()" infinite-scroll-distance="1"> 
     <tbody ng-repeat="item in model | tsFilter: filter | limitTo: limits track by $index"> 
      <tr class="timesheet-day-block"> 
       <td colspan="6"> 
        <span class="timesheet-date">{{item.TaskDate | dateFilter}}</span> 
       </td> 
      </tr> 

      <tr class="timesheet-table-rows" ng-repeat="list in item.List" ng-form="logged"> 
       <td>{{list.ProjectName}}</td> 
       <td>{{list.UserName}}</td> 
       <td>{{list.Date | date: 'dd/MM/yyyy'}}</td> 
       <td>{{list.Task}}</td> 
       <td>{{list.TimeWorked}}</td> 
       <td> 
        <span style="width: 85%">{{list.Note}}</span> 
        <button class="active-delete-button" ng-click="removeTask(list)" style="display: inline-block; float:right">вњ–</button> 
       </td> 
      </tr> 
     </tbody> 
    </table> 
</div> 
+3

不是答案..但是如果您通过传递过滤器参数来过滤服务器上的数据,而不是在客户端上进行过滤,那么它的性能会更好。 – harishr

回答

1
+0

这很好,但它仅适用于UserId或Date过滤器。我需要过滤UserId或日期和用户ID和日期 – HUSTLIN

+0

@HUSTLIN:我已经更新了,对不起我的坏..现在尝试,让我知道。 –

+0

是的,它的工作,谢谢!) 什么是服务davilmaycode? – HUSTLIN