【发布时间】:2016-04-29 04:19:36
【问题描述】:
我们决定在我们的应用程序中使用服务器端分页。实现很简单:
-
假设我们在服务器端有这样一个搜索动作:
[HttpGet] public ActionResult GetPeopleByName(String term, Int32 itemsPerPage = 10, Int32 page = 0) { var matches = this.people.Where(i => i.Name.Contains(term)); return Json( data: new { people = matches.Skip(itemsPerPage * page).Take(itemsPerPage).OrderBy(i => i.Name), total = matches.Count() }, behavior: JsonRequestBehavior.AllowGet ); } -
在客户端我们有一个
subscriptionHolderController:app.controller('subscriptionHolderController', ['$scope', '$http', function($scope, $http) { $scope.matches = []; $scope.itemsPerPage = 5; $scope.currentPage = 0; $scope.searchTerm = ''; // $scope.prevPage = function() { ... }; // $scope.prevPageDisabled = function() { ... }; // $scope.nextPage = function() { ... }; // $scope.nextPageDisabled = function() { ... }; $scope.pageCount = function() { return Math.ceil($scope.totalPages / $scope.itemsPerPage); }; $scope.$watch('currentPage', function() { $scope.search(); }); $scope.search = function() { if($scope.searchTerm === '') return; // initiate a GET-request with params: { page: $scope.currentPage, term: $scope.searchTerm, itemsPerPage: $scope.itemsPerPage } } $scope.matchesFound = function () { return $scope.matches.length > 0; } }]);
问题
因此我们有一个简单的search-box。但我们的应用程序需要一种具有一些附加功能的搜索类型,它不使用搜索词,其结果集应该以与上面所示相同的方式分页。
如何为不同类型的搜索重用分页逻辑?
【问题讨论】:
-
一个想法是将分页逻辑+ UI分离为具有隔离范围的指令。这将使您能够在多个地方使用它。看看指令部分[docs.angularjs.org/guide/directive] 在角度文档中。
-
您是否有兴趣重用客户端或服务器端?
-
@DaveA 我想按部分/页面从服务器获取数据,无论它是输入(在客户端),您发送的是
search term、page info还是 @ 987654329@ 一定会说radioboxes而你正在发送page info+that parameters -
@CMR 你能说明我如何制定这样的指令吗?
-
一个快速的解决方案是使用类似这样的东西 > angular-ui.github.io/bootstrap/#/pagination 。你从你的控制器提供参数,你就完成了。如果这对您不起作用,您必须选择自定义寻呼机指令。让我知道这是否是您想要走的路线,我们可以进一步讨论,也许构建一个 jsFiddle 作为示例。
标签: c# javascript angularjs pagination