angularJS 分页不读取当前页码
angularJS pagination not reading current page number
我正在尝试在我的 angularJS 项目中实现 ui.bootstrap.pagination,但我似乎无法读取当前页码,即使我已经设置了 ng-model。我正在使用 angular-ui-bootstrap 版本 0.13.3.
我html的相关部分:
<pagination
data-ng-model="currentPage"
data-ng-change = "paginate()"
data-total-items="repositories.total_count"
data-items-per-page="numPerPage"
data-max-size="maxSize"
data-boundary-links="true" >
</pagination>
还有我的代码:
angular.module('myApp.repositories')
.controller('RepositoryController', ['$scope', function($scope) {
$scope.repositories = {};
$scope.currentPage = 1;
$scope.numPerPage = 30; // Number of items per page, set by Github API
$scope.maxSize = 10; // Number of pages to show in pagination
$scope.paginate = function() {
$http.get('https://api.github.com/search/repositories/', {
params: {
q: 'twitter',
page: $scope.currentPage
}
})
.then(function(response){
if(response.data){
$scope.repositories = response.data;
}
});
};
}]);
分页按预期显示,我可以使用它而不会引发错误,但在我的 paginate() 函数中 $scope.currentPage 总是读取 1.
我可能遗漏或忽略了一些非常基本的东西,但我似乎无法弄清楚为什么它不起作用。
在你的模型中总是有一个点。试试这个:
<pagination
data-ng-model="vm.currentPage"
...
$scope.vm = {currentPage: 1};
为防止此类问题,请使用 controllerAs
并避免使用 $scope
作为模型。
请参阅本指南:https://github.com/johnpapa/angular-styleguide#controllers
发生这种情况的原因是因为某些指令在该元素中创建了一个范围,并且由于范围的相关方式(继承),您的 属性 最终被隐藏了,所以子项与父项不同。
这很烦人而且很复杂,这就是为什么根本没有解决这个问题的最佳方法。除了对实际模型的引用(例如,控制器实例,由 controllerAs
机制提供便利),不要在 $scope
中放入其他内容
我迟到了几个月,但是,我想确保这个问题的未来读者不会感到困惑。使用 $scope 是完全有效的,实际上是开始使用 AngularJS 的一个很好的方法。 "Controller As" 语法是可选的。
这里的解决方案非常简单:将选定的页码传递给 'Paginate' 函数。然后使用该值设置 $scope.currentPage.
angular.module('myApp.repositories')
.controller('RepositoryController', ['$scope', function($scope) {
$scope.repositories = {};
$scope.currentPage = 1;
$scope.numPerPage = 30; // Number of items per page, set by Github API
$scope.maxSize = 10; // Number of pages to show in pagination
$scope.paginate = function(pageNumber) {
$scope.currentPage = pageNumber;
$http.get('https://api.github.com/search/repositories/', {
params: {
q: 'twitter',
page: $scope.currentPage
}
})
.then(function(response){
if(response.data){
$scope.repositories = response.data;
}
});
};
}]);
我正在尝试在我的 angularJS 项目中实现 ui.bootstrap.pagination,但我似乎无法读取当前页码,即使我已经设置了 ng-model。我正在使用 angular-ui-bootstrap 版本 0.13.3.
我html的相关部分:
<pagination
data-ng-model="currentPage"
data-ng-change = "paginate()"
data-total-items="repositories.total_count"
data-items-per-page="numPerPage"
data-max-size="maxSize"
data-boundary-links="true" >
</pagination>
还有我的代码:
angular.module('myApp.repositories')
.controller('RepositoryController', ['$scope', function($scope) {
$scope.repositories = {};
$scope.currentPage = 1;
$scope.numPerPage = 30; // Number of items per page, set by Github API
$scope.maxSize = 10; // Number of pages to show in pagination
$scope.paginate = function() {
$http.get('https://api.github.com/search/repositories/', {
params: {
q: 'twitter',
page: $scope.currentPage
}
})
.then(function(response){
if(response.data){
$scope.repositories = response.data;
}
});
};
}]);
分页按预期显示,我可以使用它而不会引发错误,但在我的 paginate() 函数中 $scope.currentPage 总是读取 1.
我可能遗漏或忽略了一些非常基本的东西,但我似乎无法弄清楚为什么它不起作用。
在你的模型中总是有一个点。试试这个:
<pagination
data-ng-model="vm.currentPage"
...
$scope.vm = {currentPage: 1};
为防止此类问题,请使用 controllerAs
并避免使用 $scope
作为模型。
请参阅本指南:https://github.com/johnpapa/angular-styleguide#controllers
发生这种情况的原因是因为某些指令在该元素中创建了一个范围,并且由于范围的相关方式(继承),您的 属性 最终被隐藏了,所以子项与父项不同。
这很烦人而且很复杂,这就是为什么根本没有解决这个问题的最佳方法。除了对实际模型的引用(例如,控制器实例,由 controllerAs
机制提供便利),不要在 $scope
中放入其他内容
我迟到了几个月,但是,我想确保这个问题的未来读者不会感到困惑。使用 $scope 是完全有效的,实际上是开始使用 AngularJS 的一个很好的方法。 "Controller As" 语法是可选的。
这里的解决方案非常简单:将选定的页码传递给 'Paginate' 函数。然后使用该值设置 $scope.currentPage.
angular.module('myApp.repositories')
.controller('RepositoryController', ['$scope', function($scope) {
$scope.repositories = {};
$scope.currentPage = 1;
$scope.numPerPage = 30; // Number of items per page, set by Github API
$scope.maxSize = 10; // Number of pages to show in pagination
$scope.paginate = function(pageNumber) {
$scope.currentPage = pageNumber;
$http.get('https://api.github.com/search/repositories/', {
params: {
q: 'twitter',
page: $scope.currentPage
}
})
.then(function(response){
if(response.data){
$scope.repositories = response.data;
}
});
};
}]);