5

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;
  });
}
4

3 回答 3

8

一个完整的分页解决方案是:(1)与服务器/数据库通信的服务,(2)处理下一个/上一个的指令,以及(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的分页指令,这是一项正在进行的工作。

于 2013-01-06T08:08:05.440 回答
1

AngularJs 是客户端。应该支持这些参数的是外部数据资源的提供者。

您的问题的可能解决方案可能是$resource(或参数选项 Mark 提到):

var UserAccounts = $resource('/useraccounts/:userId/limit/:limit/offset:offset', {userId:'@id'});
var accounts = User.get({userId:123, limit:10, offset:10}, function() {
});

当然,服务器端需要以不同的方式读取参数。

于 2013-01-05T22:19:57.963 回答
1

我不确定我是否理解您的问题,但是 $http 方法有一个config参数,它是一个对象,其中一个属性是“params”对象:

params – {Object.} – 将
?key1=value1&key2=value2在 url 之后转向的字符串或对象的映射。如果值不是字符串,它将被 JSON 化。

如果您的“限制”和“偏移”值在 $routParams 中,那么这似乎是获取它们的好地方。但是,您可能需要考虑将与您的服务器接口的代码包装到 Angular 服务中。该服务可以存储当前限制和偏移值。您可以将服务注入您的控制器以访问服务提供的功能(和/或数据)。

于 2013-01-05T23:02:47.360 回答