簡體   English   中英

為什么$ watchGroup兩次調用它的回調?

[英]Why is $watchGroup calling it's callback twice?

我有一組需要監視的下拉列表。 一旦下拉列表選擇了一個未定義的值(即默認值),那么我們應該使用這些值觸發ajax請求。 我的手表組代碼如下。

    $scope.$watchGroup([
        'formData.DDL1',
        'formData.DDL2',
        'formData.DDL3'],
        function (newValues, oldValues, $currentScope) {
            // If any of the new values are undefined, then do *not* fire a new request
            for (var i in newValues) {
                if (newValues[i] === undefined)
                    return;
            }

            DataService.getData(newValues[0], newValues[1], newValues[2])
                .then(function (data) {
                    $currentScope.data = data;
                });
        });

        <label for="ddl1" class="control-label pull-left">DDL1</label>
        <select ng-model='formData.DDL1'
                class='form-control'
                ng-options='option.id as option.name for option in options'
                required
                name='DDL1'>
            <option value=''>Please select an option.</option>
        </select>

不幸的是,由於某種原因,每次我更改下拉列表(即,僅選擇一個不同的選項)時(例如下面的DDL示例), $watchGroup調用兩次回調。 這導致了奇怪的行為,因為$currentScope.data正在將來自回調的數據連接到自身(而不是破壞性分配,這是我可以看到的)。

顯然, $watchGroup的角度為1.3.X(我目前正在使用1.3.0-rc.1),該邊緣仍在不斷發展,因此我預計會有一些問題。 還有其他人遇到這個問題和/或解決它嗎?

為了簡潔起見,名稱已被替換。

我認為您的代碼應如下所示:

控制器:

$scope.ddlUpdated = function(){
    DataService.getData($scope.formData.DDL1, $scope.formData.DDL2, $scope.formData.DDL3)
                .then(function (data) {
                    $currentScope.data = data;
                });
}

視圖:

    <label for="ddl1" class="control-label pull-left">DDL1</label>            
    <select ng-model='formData.DDL1'
            class='form-control'
            ng-options='option.id as option.name for option in options'
            required
            name='DDL1' ng-change="formData.DDL1 && ddlUpdated()">
        <option value=''>Please select an option.</option>
    </select>

我不會在控制器中使用“監視功能”,而是在3個不同的selects使用ngChange指令

使用“監視”功能的最常用方法是在自定義指令的鏈接函數內部,但是您不需要為此使用自定義指令,因為Angular已經為我們提供了ngChange指令,該指令可用於通過以下方式通知控制器視圖中發生的更改。 讓我們這樣說:在Angular中,控制器生成通過指令在視圖中使用的模型,但是當視圖中發生“事情”時,指令也負責與控制器進行通信。

暫無
暫無

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

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