2015-09-08 17 views
8

'u yeniden başlatın Her 10 saniyede bir tekrarlıyorum. Bu iyi çalışıyor. Emirleri gösterir. Şimdi bir kabul siparişi fonksiyonu istiyorum. Ama bu tıklandığında aradaki aralığı düzeltmek istiyorum. Ve sipariş iadeleri kabul edildiğinde, bu aralığı tekrar devam ettirmek istiyorum.Bir açısal aralığı duraklatıp

Bunu yapmanın en iyi yolu nedir? Sen $interval bir değişken oluşturmak gerekir

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

Aralığı iptal etmek için '$ interval'' '$ interval.cancel'' dönüş değerini iletebilirsiniz. Ayrıca, bir boole bayrağı ayarlanmışsa döndüren ve hiçbir şey yapmayan aralık işlevinin içinde bir dal da olabilir. –

cevap

8

kodum: tıklama işlevi içinde Sonra

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

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

, cancel zamanlayıcı: güncelleme tamamlandıktan sonra

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

, özgeçmiş:

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

Dikkat edilmelidir: bu, aralığı duraklatmaz ve kaldığı yerden devam ettirmez. Orijinal aralığı iptal eder ve ardından tekrar baştan başlar. – Ryan