2016-09-27 98 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到新的結果集