跳过同样的老人......我是bla bla的新手......
我有这种困惑,在我下面给出的代码中,当我以当前代码中显示的方式更改变量“watchVar”(最初将具有10,但在不同视图中)的值时,不会触发手表(如果是事件,我不知道)。 (我可以通过日志消息确认没有打印消息)
但是当我切换语句2和9的注释时,$ watch工作。
$scope.funcy = function(){
//$scope.watchVar=""; // Resetting So the watch on this variable calls a method
$http({
method : 'GET',
url : 'myUrl',
headers : {'Content-Type' : 'applicaiton/x-www-form-urlencoded'}
}).success(function(response){
if(response.response_code==1){
$scope.watchVar=""; // Resetting So the watch on this variable calls a method
$scope.mylist = response.results;
$scope.watchVar= $scope.mylist[0]; //gives 10
}
});
}
$scope.$watch('watchVar',function(){
console.log("watch watchVar : " + $scope.watchVar);
if(angular.isNumber($scope.watchVar)==true){
// call a func
}
});
我能想到两个原因。
上述两个陈述中是否有任何一个说明了这种行为的原因,还是有其他原因我显然不知道。
再次提前等同于...等等; P
编辑: 我写了一个大段试图解释我的情景,并意识到在嗯眼睛会更痛苦...是的眼睛...而不是写所有这些。 所以删除了。 我意识到我有其他方法可以解决。
只是好奇地知道为什么我的一个场景有效,而其他两个场景都没有做同样的事情。
答案 0 :(得分:0)
如果观察到的表达式的值自上次摘要循环以来已经更改,则观察者在摘要循环中称为 。
如果您执行类似
的操作var old = $scope.watchVar;
$scope.watchVar = "";
$scope.watchVar = old;
然后,当执行摘要循环时,angular仍然会看到与之前的摘要循环相同的watchVar值。
你想要实现的目标尚不清楚,但观察者可能不是正确的解决方案(很少这样)。