$watch 下的日志对于 newV 和 OldV 都返回 undefined,但 watch 之前的日志返回对象的正确属性。我附上了显示数据结构的第一个日志的结果。我正在尝试向贡献者数组内的 amount 属性添加一个监听器。
for(var j = 0; j < vm.project.localCosts.length; j++) {
console.log( vm.project.localCosts[j]);
for (var k=0; k < vm.project.localCosts[j].contributors.length; k++) {
console.log(vm.project.localCosts[j].contributors[k]);
$scope.$watch('vm.project.localCosts[j].contributors[k].amount',function(newV,OldV){
console.log(newV,OldV);
})
}
}
最佳答案
替换
'vm.project.localCosts[j].contributors[k].amount'
与
'vm.project.localCosts[' + j + '].contributors[' + k + '].amount'
但我认为你不应该生成这样的 watch ,因为它的开销很大。也许您可以告诉我们您实际上想要完成什么
这很可能会更好
HTML
<div ng-app="demo">
<table ng-controller="demoController">
<tr ng-repeat="localCost in vm.project.localCosts">
<td ng-repeat="contributor in localCost.contributors">
<input ng-change="callback(localCost.contributors[$index], contributor, $index, $parent.$index)" type="text" ng-model="localCost.contributors[$index]" />
</td>
</tr>
</table>
</div>
Javascript
var app = angular.module("demo", []);
app.controller("demoController", function($scope) {
$scope.vm = {
project: {
localCosts: [{
contributors: ["a", "b", "c"]
}, {
contributors: ["e", "f", "g"]
}, {
contributors: ["h", "i", "j"]
}]
}
};
$scope.callback = function(newValue, oldValue, i, j) {
console.log(i, j, oldValue, newValue);
};
});
这是一支代码笔,可以完成您可能想做的事情
关于javascript - angularjs:$scope.$watch在for循环内不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35990941/