У меня есть поле ввода с данными, прикрепленными к массиву.
<input ng-model="data.input1" value="" />
Я пытаюсь определить, когда данные в моем массиве изменились, поэтому я имею следующее:
$scope.$watchCollection('data', function(newCol, oldCol, scope) {
console.log(newCol, oldCol, scope);
});
Тем не менее, я пытаюсь выяснить, какая часть моего массива изменилась, например, data.input1
в этом случае.
Если бы у меня был другой вход с ng-model="data.input2"
, я хотел бы знать, что input2 был фактически изменен, а не input1
Есть ли способ достичь этого?
Вы можете использовать $watch
и установить третий параметр как true
. Третий параметр используется для разрешения равенства объектов.
$scope.$watch('data', function(newCol, oldCol) {. . . },true);
И обратитесь к приведенной ниже ссылке для получения дополнительной информации об использовании $watch
с равенством объекта. https://docs.angularjs.org/api/ng/type/ $ rootScope.Scope # $ watch
Там нет "из коробки", чтобы выяснить, какая часть массива изменилась. Вам нужно будет пропустить newCol и сравнить со значениями oldCol для каждого индекса:
$scope.$watchCollection('data', function(newCol, oldCol) {
for (var i = 0; i < newCol.length; i++) {
if (newCol[i] !== oldCol[i]) {
// newCol[i] is your changed value
}
}
});