2017-05-31 53 views
1

當內容發生變化時,I $監視角度指令run frame.sly(「reload」)函數。

但我應該馬上做,現在內容發生變化後console.log看起來像這樣。

登錄 日誌(2) 日誌(3) 日誌(4) 日誌(5)...

每一次它調用frame.sly( 「刷新」)功能越來越倍。

scope.$watch(

    function() { 
    return scope.value; 
    }, 

    function (newValue, oldValue) { 
    if (!angular.equals(oldValue, newValue)) { 
      $timeout(function() { 
       console.log("Log");  
       frame.sly("reload"); 
      }, 300) 
    } 

} ,true); 

任何想法? 提前致謝。

+0

你可能會問,只要發生變化並且沒有延遲就應該發生日誌嗎? – Sagar

+0

你只想調用一次它? – SaiUnique

回答

1

您可以註銷$watch這樣的:

var watcher = scope.$watch(

    function() { 
    return scope.value; 
    }, 

    function (newValue, oldValue) { 
    if (!angular.equals(oldValue, newValue)) { 
      $timeout(function() { 
       console.log("Log");  
       frame.sly("reload"); 
       watcher(); 
      }, 300) 
    } 

} ,true); 
+0

謝謝先生:)它的工作 –

0

有一個簡單的方法來做到這一點

var watchVariable= $scope.$watch("Watcher", function() { 
// ... 
watchVariable(); 
}); 

。這被稱作註銷

0

你可以只添加類似var watchCalled = false當手表調用一次時,將此值更改爲true

var watchCalled = false; 

scope.$watch('variableToWatch', function(newValue, oldValue) { 
    if (!watchCalled) { 
    function() { 
     return scope.value; 
    } 

    function (newValue, oldValue) { 
     if (!angular.equals(oldValue, newValue)) { 
     $timeout(function() { 
      console.log("Log"); 
      frame.sly("reload"); 
      scopeCalled = true; 
     }, 300) 
     } 
    } 
    } 
}, true);