例如,我有一个对象数组。
$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);
}
注意:我没有测试过上面的代码;
试试这个。
var app = angular
.module('MyApp', [])
.controller('Main', ['$scope', function($scope) {
var vm = this;
vm.items = [
{id: 1, name: 'one'},
{id: 2, name: 'two'},
{id: 2, name: 'three'}
];
for (var i = 0; i < vm.items.length; i++) {
$scope.$watch('ctrl.items[' + i + ']', function(newVal) {
console.log(newVal);
}, true);
}
}
]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div class="main-content" ng-app="MyApp" ng-controller="Main as ctrl">
<div ng-repeat="item in ctrl.items">
<input type="text" ng-model="item.name" />
</div>
</div>