我一直在使用$ watchGroup來觀察一系列的字段並觸發一系列的功能,具體取決於某個特定字段是否已被更改。
我設置了以下plnkr來演示我遇到的意外行爲。
$scope.$watchGroup(['first', 'second', 'third'], function(newValues, oldValues)
{
var message =
{
first: newValues[0],
second: newValues[1],
third: newValues[2],
firstOld: oldValues[0],
secondOld: oldValues[1],
thirdOld: oldValues[2]
};
if(newValues[0] !== oldValues[0]){
console.log('First changed')
}
if(newValues[1] !== oldValues[1]){
console.log('Second changed')
}
if(newValues[2] !== oldValues[2]){
console.log('Third changed')
}
$scope.messages.push(message);
});
該場景涉及三個觀看的領域,我想觸發一個功能取決於哪個領域已經改變。我一直在使用'newValues'和'oldValues'來監視哪個字段發生了變化。
我碰上了,問題是,如果我已經改變了「二」字段,然後去改「第一」或「第三」字段,將觸發「第二」功能作爲其存儲先前「 newValues'和'oldValues',這使得它看起來像「Second」字段已經改變,如此image中所示。
我突出了圖片中的異常。我希望一旦我開始改變「第三」領域,「第二」的'newValues'和'oldValues'就像它不是場改變一樣。
我知道我可以堅持兩個級別的舊值,並比較它們來解決這個問題,但我希望它能像我所描述的那樣工作。任何澄清,如果這是一個錯誤或預期的功能,將不勝感激。
$ watchGroup的angular文檔聲明watchExpressions是一個「將使用$ watch()」單獨觀看的表達式數組。這使我認爲這不是預期的功能。
我在與一些類似的問題,我正在確認並且希望能夠分辨哪個watchExpression觸發了$ watchGroup偵聽器函數。想聽聽這個解決方案! –