AngularJS变量和$ watch的依赖关系

时间:2014-02-19 12:46:08

标签: javascript angularjs

我一直在努力了解Angular是如何处理事情的,并且无法弄清楚为什么$ watch在为监视变量赋值时似乎不起作用。我把它归结为这个测试:

<div ng-controller="myController">
  testElem={{testElem}}, testData[2]={{testData[2]}}
</div>

function myController($scope){
    $scope.debugFunc= function(){
        $scope.testData=[4,5,6,7,8];
        $scope.$apply();
    };
    setTimeout( $scope.debugFunc, 1000 );

    $scope.testData=[1,2,3];
    $scope.testElem=0;
    $scope.$watch('$scope.testData', 
                  function(){$scope.testElem=$scope.testData[2];}, 
                  true);    
}

此输出testElem=3, testData[2]=3然后testElem=3, testData[2]=6

我注意到watch函数至少执行一次,因为testElem == 3,但为什么不在一秒钟之后分配testData []?

1 个答案:

答案 0 :(得分:1)

使用

$scope.$watch('testData',function(){$scope.testElem=$scope.testData[2];});

您无需在$scope函数

中键入$watch

另外,既然你只是在看一个充满数字(值,而不是引用)的数组,你可以省略$watch函数中的第三个参数