例如,我有一个对象数组。

$scope.items = [
    {id: 1, name: 'one'},
    {id: 2, name: 'two'},
    {id: 2, name: 'three'}
];


并在模板中有类似

<div ng-repeat="item in items">
    <input type="text" ng-model="item.name" />
</div>


我想像这样添加$watch(用于跟踪输入中的更改)

$scope.$watch('item', function(newVal){}, true);


如果我想在newVal项(例如{id: 1, name: 'one'})中使用,该怎么办?

没有对象数组! newVal中只有一个更改的对象!
我无法在控制器中为数组的每个对象创建变量。

我尝试了类似的东西

for (var i = 0; i < $scope.items.length; i++) {
    $scope.$watch('items[' + i = ']', function(newVal) {
        console.log(newVal);
    }, true);
}


但是那是错误的。

最佳答案

您可以尝试类似

for (var i = 0; i < $scope.items.length; i++) {
    (function(k){
        $scope.$watch(function(){
            return $scope.items[k]
        }, function(newVal) {
            console.log(newVal);
        }, true);
    })(i);
}


注意:我尚未测试以上代码;

07-28 06:47