簡體   English   中英

當監視的變量在指令外部(從服務器)異步更新時,$ watch不在指令內部觸發

[英]$watch not firing inside directive when watched variable is updated asynchronously outside the directive (from server)

我被困在嘗試從正在創建的指令中監視模型。 我正在創建一個分頁指令,向其中傳遞記錄總數和當前頁碼(從服務器獲取)。 基本上,我是根據記錄總數和用戶對每頁記錄數的選擇來計算頁面數。 計算出的數字被推送到一個數組,並且該數組綁定到一個下拉列表。 下拉菜單的選定值綁定到一個模型,該模型可以是用戶的選擇,也可以根據用戶執行的其他一些交互(例如,更改每頁記錄數)從服務器上進行更新。 下面-我的代碼。

我的指令定義:

<paginator total-count="al.pager.totalElements" page-number="al.pager.number"></paginator>

我的指令實現(paginator.js):

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

我的指令視圖(paginator.html):

<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>

現在,我要完成的工作是,當數據庫中的記錄總數更改時,我希望更新頁面下拉列表的數量,並希望所選值顯示數據庫返回的頁面編號。

因此,在指令中,我正在監視“ totalCount”變量,當它更改時,我將像這樣重新計算頁面數。

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

問題是,當我從服務器獲取新的totalCount時,未調用我的getPageNumbers()方法。 由於未填充下拉列表,因此未顯示所選值。 誰能看到我所缺少的嗎? 任何幫助是極大的贊賞。

scope.$watch的偵聽器(第二個參數)應該是一個函數,但是您要向其傳遞getPageNumbers()的結果,而不是函數本身。

嘗試scope.$watch('totalCount', getPageNumbers, true)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM