我一直在努力了解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 []?
答案 0 :(得分:1)
使用
$scope.$watch('testData',function(){$scope.testElem=$scope.testData[2];});
您无需在$scope
函数
$watch
另外,既然你只是在看一个充满数字(值,而不是引用)的数组,你可以省略$watch
函数中的第三个参数