2015-09-08 74 views
8

我有一个函数,我每10秒重复一次。这工作正常。它显示订单。现在我想要一个接受订单功能。但是,当这是点击我想暂停间隔。当接受订单返回时,我想再次恢复此间隔。暂停一个角度间隔,然后重新开始

这样做的最好方法是什么?

我的代码

if ($auth.isAuthenticated()) { 
    //request 
    $scope.checkNewOrders = function(){ 
     newOrderService.getNewOrders().then(function (response) { 
      //console.log(response.data.status); 
      if (response.data == 'token_error') { 
       $auth.logout(); 
      } 

      if (response.data.status == 'success') { 
       $rootScope.openOrders = response.data.data; 
      } 

      if (response.data.status == 'no_orders') { 
       $rootScope.openOrders = false; 
      } 
     }); 
    }; 

    //Put in interval, first trigger after 10 seconds 
    $interval(function(){ 
     $scope.checkNewOrders(); 
    }.bind(this), 10000); 

    //invoke initialy 
    $scope.checkNewOrders(); 
} 

$scope.acceptOrder = function(orderid) { 
    console.log(orderid); 
} 
+1

您可以将'$ interval'的返回值传递给'$ interval.cancel'来取消间隔。你也可以在interval函数内部有一个分支,如果设置了一个布尔标志,它将返回并且什么也不做。 –

回答

8

您应该创建$interval的变量:

var timer = null; 
$scope.checkNewOrders = function(){ ... 

timer = $interval(function(){ 
    $scope.checkNewOrders(); 
}.bind(this), 10000); 

然后点击功能里面,cancel定时器:

$scope.acceptOrder = function(orderid) { 
    $interval.cancel(timer); 
    timer = null; 
} 

更新完成后, ,简历:

newOrderService.getNewOrders().then(function (response) { 
    if (timer === null) { 
     timer = $interval(function(){ 
      $scope.checkNewOrders(); 
     }.bind(this), 10000); 
    } 
    ... 
+1

需要注意的是:这并不会暂停间隔,并重新开始。它取消原始间隔,然后从头开始再次启动。 – Ryan

相关问题