$ watch是否适用于立即声明?

时间:2016-04-26 16:29:56

标签: angularjs watch

跳过同样的老人......我是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
        }
    });

我能想到两个原因。

  1. 手表可能无法立即更改同一变量。
  2. 如果在块或其他内容中进行更改,则变量的最终更改不会实时反映,在此情况下为成功方法。
  3. 上述两个陈述中是否有任何一个说明了这种行为的原因,还是有其他原因我显然不知道。

    再次提前等同于...等等; P

    编辑: 我写了一个大段试图解释我的情景,并意识到在嗯眼睛会更痛苦...是的眼睛...而不是写所有这些。 所以删除了。 我意识到我有其他方法可以解决。

    只是好奇地知道为什么我的一个场景有效,而其他两个场景都没有做同样的事情。

1 个答案:

答案 0 :(得分:0)

如果观察到的表达式的值自上次摘要循环以来已经更改,则观察者在摘要循环中称为

如果您执行类似

的操作
var old = $scope.watchVar;
$scope.watchVar = "";
$scope.watchVar = old;

然后,当执行摘要循环时,angular仍然会看到与之前的摘要循环相同的watchVar值。

你想要实现的目标尚不清楚,但观察者可能不是正确的解决方案(很少这样)。