angular:$对象数组中的watch对象

问题描述 投票:0回答:2

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

$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);
}

但那是错的。

javascript angularjs angular
2个回答
2
投票

你可以尝试类似的东西

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);
}

注意:我没有测试过上面的代码;


1
投票

试试这个。

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>
© www.soinside.com 2019 - 2024. All rights reserved.