2016-09-27 62 views
0

我有一个指令,它使用延迟加载一次加载10条记录,并在用户滚动时添加。这部分工作正常。问题是我无法弄清楚如何使用文本框来过滤整个集合上的记录。由于延迟加载,列表框中只有10条记录。我在另一个不在指令中的列表框上做了同样的事情,它工作得很好,但我无法让它在指令中工作。使用延迟加载过滤指令中的数据

这里是指令的模板:

<div class="pec-checkbox-picklist btn-group btn-group-picklist"> 
<button id="{{itemId}}" class="form-control dropdown-toggle" data-toggle="dropdown"> 
    <span class="cbpl-btn-text">{{ getSelectedCount() }} {{ title }}</span><span class="caret"></span> 

</button> 
<ul class="dropdown-menu dropdown-menu-complex" data-complex-menu style="overflow-y: scroll" lazy-load load-more="loadMore()"> 
    <li class="list-group-item search-item"> 
     <input class="form-control" type="text" placeholder="{{ searchPlaceholder }}" ng-model="query" /> 
     <button type="button" class="btn btn-small" ng-show="query" ng-click="query = undefined">clear</button> 
    </li> 
    <li class="divider" ng-hide="query"></li> 
    <li class="list-group-item" ng-hide="query"> 
     <label class="checkbox"> 
      <input type="checkbox" ng-click="allSelected(list)" ng-checked="allNeedsMet(list)"> 
      Select All 
     </label> 
    </li> 
    <li class="divider"></li> 
    <li class="list-group-item" ng-repeat="item in list | searchFilter:nameProp:query"> 
     <label class="checkbox" title="{{ item[nameProp] }}"> 
      <input type="checkbox" ng-model="item.selected" ng-change="callbackFn({object: item})"> 
      {{ item[nameProp] }} 
     </label> 
    </li> 
</ul> 

这里是该指令searchfilter:

angular.module('ssq.shared') 
    .filter('searchFilter', function() { 
     return function (items, propName, query) { 
      if (!query) return items; 

      return _.filter(items, function (item) { 
       return item[propName].toUpperCase().indexOf(query.toUpperCase()) !== -1; 
      }); 
     }; 
    }); 

我在范围内的变量整个缓存的记录在主控制器,但我无法弄清楚如何使用它们来搜索指令。

任何援助非常感谢!

回答

1

因为您只加载了10条记录,所以您只能从这10条记录进行过滤。您需要做的是基于查询过滤器重新加载10条记录的列表。
您的加载代码列表不包括,但基本是一个ng-change添加到search text box并调用load list function传递一个过滤器和复位$scope.list到新的结果集