2016-04-26 58 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