ui-bootstrap分页重置初始化当前页面
我正在使用ui-bootstrap(angular-bootstrap)库中的分页指令。 初始化时遇到问题。 我通过url导航到特定页面时,出现了我的问题。
发生了什么事情是我的控制器使用$ stateParams中的正确页面进行初始化,然后分页指令初始化并触发将页面重置为1的ng-change函数。现在,在select页面不再使用了一种只捕获用户点击更改页面的方法? 理想情况下,我希望指令在控制器之前进行初始化,这样我的页面就不会被重置。 先谢谢你。
如果需要,我可以包含代码,但是我觉得我的问题不一定需要代码块。
所以我深入研究angular引导代码之后find了一个解决scheme。 他们的代码在totalPages上有一个监视,检查当前页面是否大于totalPages值。
angular引导代码:
if ( $scope.page > value ) { $scope.selectPage(value); } else { ngModelCtrl.$render(); }
发生了什么事情,如果我刷新页面3(例如)我的控制器重新加载该页面的项目暂时导致总项目为0和totalPages计算为1.这触发了手表和上述代码。
我的解决scheme是加载状态的解决项目,以便总项目(并依次totalPages)总是准确的。
如果你不想使用state来parsing数据,那么你可以在paginator上添加一个ng-if
指令。 假设$scope.total_count
被用来绑定到total-items
属性,你可以做如下的事情:
<pagination data-ng-if="total_count" total-items="total_count" ng-model="applied_filters.page" max-size="maxSize" class="pagination-sm" boundary-links="true" rotate="false" class="nomargin" num-pages="numPages"></pagination>
这样,当你从服务器和当前页面的总数不会大于totalPages时,指令总是被初始化
ng-if
指令对我来说并不像预期的那样工作(我没有使用controllerAs
语法):分页无法再更新$scope.currentPage
variables。 解决scheme是使用ng-model="$parent.currentPage"
而不是ng-model="currentPage"
。
<uib-pagination ng-if="totalItems" total-items="totalItems" items-per-page="itemsPerPage" ng-model="$parent.currentPage"> </uib-pagination>
这个问题的解决scheme,我从Github中find并实现并完美工作。
正如其他答案中提到的,问题是totalItems
,当我尝试移动到第2/3 / n页时, totalItems
变为0一会儿,在这个过程中, currentPage
值变成1,我不能移动到我想要的页。 所以我的诀窍是,在我从服务器调用数据之前,我只是将一个更大的数字设置为totalItems
并且在从服务器接收数据之后,我更新totalItems
。
$scope.totalItems = 1000; QuotationService.getQuotations(url).then(function ( response ) { $scope.totalItems = response.data.total; $scope.quotations = response.data.data; $scope.isTableLoading = false; });
在我看来,只有isTableLoading
为false
,我才显示分页,否则分页会显示错误的页数。
<div class="text-center" ng-show="isTableLoading == false"> <uib-pagination boundary-links="true" total-items="totalItems" items-per-page="15" max-size="15" ng-model="currentPage" class="pagination-sm" previous-text="‹" next-text="›" first-text="«" last-text="»"> </uib-pagination> </div>
现在一切正常。
如果你想在页面加载的时候设置页面, 那么就按照这里所描述的加载模型。
从网站:
<pagination total-items="totalItems" ng-model="currentPage" ng-change="pageChanged()"> </pagination>
我相信你已经看过了,所以如果在初始化控制器的时候没有正确设置模型,那么你显然会遇到问题。 也有可能在另一个使用$scope.currentPage
地方被覆盖的情况。 虽然你可能会觉得没有代码更容易,但我会build议发布你所指的HTML和Angular Controller。 希望能帮助到你!
解决状态的另一种方法是设置一个已知值模块中的总项目。 同样的事情,其实我只是想对你上面的回答发表评论,但是我没有必要的要点。 感谢您的解释,帮助我!