[英]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.