5

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

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

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

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

4

2 回答 2

3

好吧,假设您的服务器上有一个 API/CGI 执行搜索并返回一个子集(例如通过使用 SQLs 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>
于 2013-10-29T20:34:36.773 回答
1

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

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

于 2013-10-29T20:22:27.413 回答