目前我使用filter:query在数据中搜索,类似这样的
<input type="text" ng-model="query">
<tr ng-repeat="thought in thoughts | filter:query">
<td>thought.title</td>
</tr>
如果我一次加载完整的json数据,它运行良好。 现在我的问题是我可以实现服务器端搜索以及分页,因为我不想一次加载完整的数据集吗?
一种方法:对于当前结果集搜索可以使用过滤器正常执行,如果没有找到结果则调用服务器请求另一条数据。这种做法好吗?
答案 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请求将所有数据加载到客户端,否则将无法进行客户端搜索。
服务器端搜索可能是你最好的选择。