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.currentPagevariables。 解决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; }); 

在我看来,只有isTableLoadingfalse ,我才显示分页,否则分页会显示错误的页数。

 <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="&lsaquo;" next-text="&rsaquo;" first-text="&laquo;" last-text="&raquo;"> </uib-pagination> </div> 

现在一切正常。

如果你想在页面加载的时候设置页面, 那么就按照这里所描述的加载模型。

从网站:

 <pagination total-items="totalItems" ng-model="currentPage" ng-change="pageChanged()"> </pagination> 

我相信你已经看过了,所以如果在初始化控制器的时候没有正确设置模型,那么你显然会遇到问题。 也有可能在另一个使用$scope.currentPage地方被覆盖的情况。 虽然你可能会觉得没有代码更容易,但我会build议发布你所指的HTML和Angular Controller。 希望能帮助到你!

解决状态的另一种方法是设置一个已知值模块中的总项目。 同样的事情,其实我只是想对你上面的回答发表评论,但是我没有必要的要点。 感谢您的解释,帮助我!