Я использую $ 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 ', что делает его похожим на поле «Второе», как показано в этом image.
Я выделил аномалию на картинке. Я бы ожидал, как только я начал менять поле «Третье», «newValues» и «oldValues» для «Second» будут такими же, как и не изменением поля.
Я знаю, что я мог бы сохранить два уровня старых ценностей и сравнить их, чтобы обойти это, но я бы ожидал, что он будет работать, как я описал. Любые разъяснения, если это ошибка или предполагаемая функциональность, будут оценены.
Угловая документация для $ watchGroup гласит, что watchExpressions - это «Массив выражений, которые будут индивидуально наблюдаться с помощью $ watch()». Это заставляет меня думать, что это не предназначенная функциональность.
Я имеющим подобную проблему с чем-то я работаю и хотел бы узнать, какое watchExpression вызвало функцию прослушивания $ watchGroup. Хотелось бы услышать решение для этого! –