2016-04-26 47 views
-1

跳过相同的旧...我是新的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. 如果更改是在块或其他内容中实现的,则变量的最终更改不会实时反映,此处为成功方法。

上述两个陈述中的任何一个是否给出了这种行为的原因,或者是否有任何其他原因,我显然不知道。

再次同老.. thanx提前等等等等,P

编辑: 我写了一大段试图解释我的方案,并意识到这将在嗯眼睛已经更多的痛苦...是啊眼睛比写所有的。 因此删除了。 我意识到我有其他的方法和解决方法。

只是好奇地想知道为什么我的一个场景工作,其他都没有,当两个人都做同样的事情。如果被监视的表达式的值已改变自上次消化环

+0

超出范围的问题:为什么你需要在你的情况下观察你的变量?承诺决议并没有使你的案件的工作? – mfrachet

回答

0

观察者是在消化循环称为

如果你这样做

var old = $scope.watchVar; 
$scope.watchVar = ""; 
$scope.watchVar = old; 

那么棱角分明,在执行摘要循环,仍然看到了watchVar相同的值,在前面的消化循环。

你试图达到的目标还不清楚,但是一个观察者可能不是正确的解决方案(它很少)。

+0

那么这是否意味着你在上面的例子中写的语句不会被看到?但是当我在这两个作业之间放置几条语句时,它就起作用了。 – Codeek

+0

不可以。你在这两者之间陈述的数量是无关紧要的。以下是它的方法:1.摘要循环。 watchVar =“foo”。 2.你的http回调执行了很多语句。 watchVar的价值改变了一百万次,但最终它被设置为“foo”。 3.摘要循环执行。 watchVar与1:“foo”具有相同的值。所以你的观察者不会被调用。 –

+0

我会尝试一些关于它的片段,以获得清晰的图像,例如在作业之间放置一个块并在作业之间放置简单的语句。然后才能够确定手表的用途。你的解释肯定会有帮助。我还会阅读关于摘要的内容(现在我知道在哪里寻找什么)。 – Codeek