Тоже с $watch играюсь. Хочу, чтобы он отслеживал изменение всего списка, но при этом показывал какой именно элемент изменился. Пока приходится делать отдельный $watch для каждого элемента, что не очень нравится.
<!doctype html>
<html ng-app="myApp">
<head>
<script src="http://code.angularjs.org/1.1.5/angular.min.js"></script>
<script>
angular.module('myApp',[])
function TodoCtrl($scope) {
$scope.todos = [
{done: true, text: "foo"},
{done: false, text: "bar"}
];
}
function TodoItemCtrl($scope) {
$scope.$watch('todos[$index]',
function(newval, oldval, scope) {
alert(
"Изменен:" + $scope.todos[$scope.$index].text
);
}, true);
}
</script>
</head>
<body>
<div ng-controller="TodoCtrl">
<ul>
<li ng-repeat="todo in todos" ng-controller="TodoItemCtrl">
<input type="checkbox" ng-model="todo.done">
{{todo.text}}
</li>
</ul>
</div>
</body>
</html>