Angularjs使用分页在大型数据集中搜索

时间:2013-10-27 20:36:40

标签: angularjs

目前我使用filter:query在数据中搜索,类似这样的

<input type="text" ng-model="query">
<tr ng-repeat="thought in thoughts | filter:query">
<td>thought.title</td>
</tr>

如果我一次加载完整的json数据,它运行良好。 现在我的问题是我可以实现服务器端搜索以及分页,因为我不想一次加载完整的数据集吗?

一种方法:对于当前结果集搜索可以使用过滤器正常执行,如果没有找到结果则调用服务器请求另一条数据。这种做法好吗?

2 个答案:

答案 0 :(得分:3)

好吧,假设你的服务器上有一个API / CGI执行搜索并返回一个子集(例如使用SQL limit start,number),实现这一点并不复杂。当您开始新查询时,您应将thoughts设置为空数组,然后进行第一次API调用,例如返回10个结果。然后你可以有一个按钮或任何机制来进行下一个API调用,返回结果11-20。在$ http回调函数中,您只需将服务器返回的数据附加到数组中,以便最后添加新数据。所以想想这样的事情(这不是真正经过测试的代码,只是为了这个答案而写下来):

$scope.getdata = function() {
  $http.post('/api/whatever', 
  { query: $scope.query, startat: $scope.thoughts.length })
    .success(function(response,status,headers,config){
      $scope.thoughts.push.apply( $scope.thoughts, reponse.data );
    });

$scope.search = function() {
  $scope.thoughts = [];
  $scope.getdata();
}

Search for: <input ng:model="query">
<button ng:click="search()">Search</button>
<button ng:click="getdata()">Get more results</button>

答案 1 :(得分:1)

除非您使用第一个ajax请求将所有数据加载到客户端,否则将无法进行客户端搜索。

服务器端搜索可能是你最好的选择。