Я хотел бы отслеживать изменения элементов в массиве. см. образец here:
angular.module('watchApp', []).controller('watchCtrl', function($scope) {
$scope.items = [
{value: 1},
{value: 2},
{value: 3}
];
$scope.newItems = [];
$scope.deleteItems = [];
$scope.modifiedItems = [];
$scope.$watchCollection('items', function(newVal, oldVal) {
console.log(newVal);
console.log(oldVal);
for(var i=0; i<newVal.length; i++) {
if (oldVal.indexOf(newVal[i])<0) {
$scope.newItems.push(newVal[i]);
}
}
for(var i=0; i<oldVal.length; i++) {
if (newVal.indexOf(oldVal[i])<0) {
$scope.deleteItems.push(oldVal[i]);
}
}
});
$scope.addOne = function() {
$scope.items.push({value:$scope.items.length+1});
};
$scope.remove = function (it) {
$scope.items.splice($scope.items.indexOf(it), 1);
};
});
Теперь я могу отслеживать новые добавленные и удаленные элементы с последней версией (1.5.0) угловой. Однако я не знаю, как получить измененные элементы в массиве. Просто используйте $watch('items', function..., true)
не работает. который сделает все элементы как новые, а все старые элементы удалены, в том числе без изменений.
'$ watch' и' $ watchCollection' просто говорят вам, что содержимое массива изменилось, вы несете ответственность за поиск разницы между старой и новой версией массива самостоятельно. – muenchdo
Да, это то, о чем я думал. Кажется, что в угловом, если вы хотите отслеживать, что было изменено, а не просто запускать уведомление, это было бы довольно сложно и неэффективно. – cairabbit
Нет, было бы неэффективно, если бы Angular всегда следил за тем, что было изменено, поскольку это сложнее вычислить и часто не требуется даже времени. – muenchdo