我使用模板文件创建了一个寻呼机小部件,我在
HTML页面中使用了两次.我有一个选择转到页面选项以及上一页和下一页的链接.
问题是当我使用选择框更新当前页面时更新,然后我使用上一页和下一页链接,当前页面会更新,但选择框不会更新.
请告诉我我做错了什么.我的构建这样的寻呼机小部件的方法有什么逻辑错误吗?
控制器代码:
var gallery = angular.module('gallery',[]); gallery.controller('ItemListCtrl',['$scope',function($scope){ /* Pagination Code */ $scope.currentPage = 1; $scope.itemsPerPage = 24; $scope.total = 100; $scope.range = function(min,max,step){ step = step || 1; var input = []; for (var i = min; i <= max; i += step) input.push(i); return input; }; $scope.prevPage = function (){ if($scope.currentPage > 1){ $scope.currentPage--; } }; $scope.nextPage = function (){ if($scope.currentPage < $scope.pageCount()){ $scope.currentPage++; } }; $scope.pageCount = function (){ return Math.ceil($scope.total / $scope.itemsPerPage); }; $scope.setPage = function (n){ if(n >= 0 && n <= $scope.pageCount()){ $scope.currentPage = parseInt(n,10); } }; }]);
这是用于复制问题的plnkr URL.
解决方法
根本原因是ng-include将为目标元素创建一个单独的范围,因此快速修复代码是为所有范围对象添加$parent前缀.
<fieldset class="pager"> <div>Page {{$parent.currentPage}} of {{$parent.pageCount()}}</div> <div> <div> <label>Go to page</label> <select ng-model='$parent.currentPage' ng-change="$parent.setPage($parent.currentPage)"> <option ng-repeat="n in range(1,$parent.pageCount())" value="{{n}}" ng-selected="n === $parent.currentPage">{{n}}</option> </select> </div> <div> <a href ng-click="$parent.prevPage()">PrevIoUs Page</a> | <a href ng-click="$parent.nextPage()">Next Page</a> </div> </div> </fieldset>
在Per Angular文档Understanding Scopes中,当您尝试对基元进行双向数据绑定(即表单元素,ng-模型)时,范围继承将无法正常工作.通过遵循始终拥有‘.’ in your ng-models的“最佳实践”,可以轻松避免与原语的这个问题