Angularjs 取消多角度JS$超时

Angularjs 取消多角度JS$超时,angularjs,timeout,Angularjs,Timeout,我和angular一起工作 我对$timeout函数有问题。 它是在ng mousedown上启动的,因此如果我单击2次,它将设置2个计时器。这是我想要避免的。如何删除前一个计时器以仅保留最后一个计时器?代码如下: $scope.stopRefresh = function() { //ng-mousedown $interval.cancel(autoRefresh); restartRefresh = $timeout(function(){

我和angular一起工作

我对$timeout函数有问题。 它是在ng mousedown上启动的,因此如果我单击2次,它将设置2个计时器。这是我想要避免的。如何删除前一个计时器以仅保留最后一个计时器?代码如下:

      $scope.stopRefresh = function() { //ng-mousedown
      $interval.cancel(autoRefresh);
      restartRefresh = $timeout(function(){
      startRefresh();
    },30000);
    };
此代码应适用于:

$scope.stopRefresh = function() { //ng-mousedown
    $interval.cancel(autoRefresh); //I am not clear with the purpose of this line.

    if(restartRefresh){
        $timeout.cancel(restartRefresh);
    }
    restartRefresh = $timeout(function(){
        startRefresh();
    },30000);
};

在设置超时之前使用
cancel()
如果我在设置之前放置它,它将返回Unfine代码不清楚。为什么要执行
$interval.cancel(autoRefresh)
?有同样的问题。也许是更好的方法。我会尽力解释我想做什么。我需要一些输入类型编号和文本输入,其中包含$interval autoRefresh()上每5秒更新一次的数据。但是当我尝试在它上进行clic时,我没有时间在下一次刷新和更改丢失之前完成更改。因此,我想在ng mousedown上将间隔冻结30秒,如果我点击OK,则将其重置。我认为您应该使用focus listener进行此操作。当输入获得焦点时,您不希望刷新。一旦用户进行了更改并且焦点不在输入范围内,则可以重新启动计时器。与将刷新延迟30秒相比,这是一个更好的选择。因为,如果用户在输入字段中停留超过30秒并进行一些更改,它将再次丢失。现在,最好将此逻辑包含在单独的指令中,因为它涉及处理焦点输入和焦点输出。@Ganesh Kumar。谢谢,这对ng焦点和ng-blur有效。还有一个问题。。。除了取消所有数据输入的间隔外,是否还有其他方法使数据在对焦期间不刷新?对于归档,这里是我的全部代码:您有一个$interval,所有输入都依赖于它。我认为,您应该为input创建一个指令,它封装了$interval服务和启动和停止功能。然后可以在多个位置使用该指令。