我有一組需要監視的下拉列表。一旦下拉列表中有一個未定義的值(即一個默認值),那麼我們應該使用這些值來觸發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),這仍然是邊緣,所以我期待一些問題。是否有其他人遇到這個問題和/或解決它?
爲簡潔起見,名稱已被替換。
我看不到你在$ watchGroup中的任何地方使用「oldValues」,那麼爲什麼你不能擺脫$ watchGroup並在你的select中使用ng-change呢? – Josep 2014-10-01 14:03:47
我需要監視多個選擇,'$ watchGroup'似乎是最習慣的方式。它肯定減少了代碼重複。 'oldValues'是'$ watchGroup'傳入的參數之一,雖然我可以將其明確地分配給'_',但我決定不會:p – 2014-10-01 14:06:51
看起來'$ watch'被潛在地多次調用, $ digest'循環,所以'$ watchGroup'也一樣。 'ngChange'是去這裏的路,但爲什麼會出現這種情況呢?有沒有辦法解決這個問題,還是我總是需要使用一個指令? – 2014-10-01 14:19:20