Javascript $watch未在指令外部异步更新被监视变量时在指令内部触发(从服务器)
我一直在试图从我正在创建的指令中观察模型。我正在创建一个分页指令,将记录总数和当前页码(从服务器获取)传递到该指令中。 基本上,我是根据记录总数和用户对每页记录数的选择来计算页数的。计算出的数字被推送到一个数组中,数组被绑定到下拉列表中。 下拉列表的选定值绑定到一个模型,该模型可以是用户的选择,也可以根据用户执行的一些其他交互(例如更改每页记录的数量)从服务器进行更新。下面是我的代码 我的指令定义:Javascript $watch未在指令外部异步更新被监视变量时在指令内部触发(从服务器),javascript,angularjs,Javascript,Angularjs,我一直在试图从我正在创建的指令中观察模型。我正在创建一个分页指令,将记录总数和当前页码(从服务器获取)传递到该指令中。 基本上,我是根据记录总数和用户对每页记录数的选择来计算页数的。计算出的数字被推送到一个数组中,数组被绑定到下拉列表中。 下拉列表的选定值绑定到一个模型,该模型可以是用户的选择,也可以根据用户执行的一些其他交互(例如更改每页记录的数量)从服务器进行更新。下面是我的代码 我的指令定义: <paginator total-count="al.pager.totalElement
<paginator total-count="al.pager.totalElements" page-number="al.pager.number"></paginator>
我的指令实现(paginator.js):
范围:{
totalCount:“=”,
页码:'='
},
链接:功能(范围){
scope.pageList=[];
getPageNumber(){
noOfPages=Math.ceil(scope.totalCount/scope.pageSize);//pageSize是每页中要显示的记录数
scope.pageList.length=0;
对于(设i=1;i范围中的侦听器(第二个参数)。$watch
应该是一个函数,但您传递的是getPageNumbers()
的结果,而不是函数本身
尝试
scope.$watch('totalCount',getPageNumbers,true)
我注意到一件很快的事情-scope中的侦听器。$watch应该是一个函数,但您传递的是getPageNumbers()的结果,而不是函数本身。也许可以尝试scope.$watch('totalCount',getPageNumbers,true)
?啊!!!事实上这就是问题所在。我没有注意到我正在调用函数。非常感谢!!此外,我必须像这样定义观察者:scope.$watch(function(){return scope.totalCount;},getPageNumber);仅将其作为“totalCount”或“scope.totalCount”传递不起作用。我不知道区别是什么。如果有人能解释原因,我将不胜感激…@bags,如果您将您的评论作为答案发布,我会将此问题标记为已回答。谢谢!
scope: {
totalCount: '=',
pageNumber: '='
},
link: function (scope) {
scope.pageList = [];
getPageNumbers() {
noOfPages = Math.ceil(scope.totalCount / scope.pageSize); // pageSize is number of records to show in each page
scope.pageList.length = 0;
for (let i = 1; i <= noOfPages; i++) {
scope.pageList.push(i);
}
}
getPageNumbers();
}
<md-input-container>
<md-select ng-model="pageNumber" ng-change="pageNumberChange()">
<md-option ng-value="page" ng-repeat="page in pageList">{{page}}</md-option>
</md-select>
</md-input-container>
link: function (scope) {
getPageNumbers() {
noOfPages = Math.ceil(scope.totalCount / scope.pageSize); // pageSize is number of records to show in each page
for (let i = 1; i <= noOfPages; i++) {
scope.pageList.push(i);
}
}
scope.$watch('totalCount', getPageNumbers(), true);
}