Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript $watch未在指令外部异步更新被监视变量时在指令内部触发(从服务器)_Javascript_Angularjs - Fatal编程技术网

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);
}