Angular $ scope。$ watch in array对象

时间:2016-12-21 16:07:26

标签: angularjs

$scope.testObj={};
angular.forEach(results, function (value,index) {
$scope.testObj[index]=value.arr;

console.log($scope.testObj[index]);
console.log(index);
$scope.$watch('testObj',function(newVal, oldVal) {       
        console.log(newVal, oldVal) ;  
      },true
);
})

上面的代码工作正常(不要担心results;它是一个数组)。问题出在我正在尝试的时候:

$scope.$watch('testObj[index]',function(newVal, oldVal) {       
            console.log(newVal, oldVal) ;  
          },true
    );

我不知道为什么会发生这种情况,我从 newVal,oldVal 获得undefined。我该如何解决?

顺便提一句testObj[0] ......

3 个答案:

答案 0 :(得分:2)

试试这个,

$scope.myvar = testObj[index];
$scope.$watch('myvar',function(newVal, oldVal) {       
            console.log(newVal, oldVal) ;  
          },true
);

修改

如果在ng-repeat中渲染更改数组,则可以使用ng-change指令并传入$ index参数。

<div ng-repeat="arr in myvar">
   <input type="text" ng-model="arr.location" ng-change="changeValue($index)"/>
</div>

或使用循环并使用其索引

进行访问
$scope.$watch('myvar', function (newValue, oldValue) {
   for(var i = 0; i < newValue.length; i++) {

   }
}, true);

答案 1 :(得分:0)

$ watchGroup可以满足您的需求更多doc https://docs.angularjs.org/api/ng/type/ $ rootScope.Scope

答案 2 :(得分:0)

你反过来了。由于forEach仅执行一次,因此$watchers内部只会观看一次,然后才会被删除。您需要做的是观看收藏,然后放置forEach insde。

$scope.$watch('testObj', function(newVal, oldVal) {
  angular.forEach(newVal, function(value, index) {
    $scope.testObj[index] = value.arr;
    console.log($scope.testObj[index]);
    console.log(index);
  })
}, true);