AngularJS在调用支持它们的外部数据资源时是否有限制和偏移请求方法?
我想有一种比这更优雅的解决方案,我通过routeParams传递限制和偏移:
function ListCtrl($scope, $http, $routeParams) {
$http.jsonp('http://www.example.com/api/list.jsonp?callback=JSON_CALLBACK&limit=' + $routeParams.limit + '&offset=' + $routeParams.offset,{callback: 'JSON_CALLBACK'}).success(function(data) {
$scope.list = data;
});
}
答案 0 :(得分:8)
完整的分页解决方案是:(1)与服务器/数据库通信的服务,(2)处理next / prev的指令,以及(3)将它们粘合在一起的控制器。
获得指令和服务后,您的控制器就像这样简单:
app.controller('MainCtrl', function($scope, myData) {
$scope.numPerPage = 5;
$scope.noOfPages = Math.ceil(myData.count() / $scope.numPerPage);
$scope.currentPage = 1;
$scope.setPage = function () {
$scope.data = myData.get( ($scope.currentPage - 1) * $scope.numPerPage, $scope.numPerPage );
};
$scope.$watch( 'currentPage', $scope.setPage );
});
同样简单的HTML:
<body ng-controller="MainCtrl">
<ul>
<li ng-repeat="item in data">{{item.name}}</li>
</ul>
<pagination num-pages="noOfPages" current-page="currentPage" class="pagination-small"></pagination>
</body>
这是一个完整的Plunker:http://plnkr.co/edit/Mg0USx?p=preview。它使用ui-bootstrap的分页指令,这是一项正在进行的工作。
答案 1 :(得分:1)
AngularJs是客户端。外部数据资源的提供者应该支持这些参数。
问题的可能解决方案可能是$resource(或params option Mark mentioned):
var UserAccounts = $resource('/useraccounts/:userId/limit/:limit/offset:offset', {userId:'@id'});
var accounts = User.get({userId:123, limit:10, offset:10}, function() {
});
当然,服务器端需要以不同的方式读取参数。
答案 2 :(得分:1)
我不确定我理解你的问题,但$ http方法有一个config
参数是一个对象,其中一个属性是“params”对象:
params - {Object。} - 字符串或对象的地图,将在网址后转为
?key1=value1&key2=value2
。如果该值不是字符串,则它将是JSONified。
如果你的“限制”和“偏移”值在$ routParams中,那么这似乎是一个很好的地方来获取它们。但是,您可能需要考虑将与服务器连接的代码包装到Angular服务中。此服务可以存储当前限制和偏移值。您可以将服务注入控制器,以访问服务提供的功能(和/或数据)。