2017-05-31 120 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);