2015-09-08 16 views
8

私は10秒ごとに繰り返す機能を持っています。これは正常に動作します。注文を表示します。今私は受け入れ注文機能が欲しい。しかし、これがクリックされると、私は間隔を空にしたい。受注が返ってきたらこの間隔をやり直したい。角度間隔を一時停止してから再開

これを行う最も良い方法は何ですか?あなたが$intervalの変数を作成する必要があり

私のコード

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

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

関連する問題