web-dev-qa-db-fra.com

Comment effacer ou arrêter le temps intervalle en angularjs?

Je fais une démo dans laquelle je récupère les données du serveur après des intervalles de temps réguliers en utilisant $interval Maintenant, je dois arrêter/annuler ceci.

Comment je peux y arriver? Si je dois redémarrer le processus, comment dois-je le faire?

Deuxièmement, j'ai une autre question: Je récupère les données du serveur après des intervalles de temps requis. Est-il nécessaire d'utiliser $scope.apply ou $scope.watch

Voici mon plunker:

  app.controller('departureContrl',function($scope,test, $interval){
   setData();

   $interval(setData, 1000*30);

   function setData(){
      $scope.loading=true;
    test.stationDashBoard(function(data){
        console.log(data);
        $scope.data=data.data;
        $scope.loading=false;
        //alert(data);
    },function(error){
        alert('error')
    }) ;

   }
});

http://plnkr.co/edit/ly43m5?p=preview

90
user944513

Vous pouvez stocker la promesse renvoyée par l'intervalle et utiliser $interval.cancel() pour cette promesse, ce qui annule l'intervalle de cette promesse. Pour déléguer le début et la fin de l'intervalle, vous pouvez créer des fonctions start() et stop() chaque fois que vous souhaitez les arrêter et les redémarrer à partir d'un événement spécifique. J'ai créé un extrait ci-dessous montrant les principes de base du démarrage et de l'arrêt d'un intervalle, en l'implémentant en vue à travers l'utilisation d'événements (par exemple, ng-click) et dans le contrôleur.

angular.module('app', [])

  .controller('ItemController', function($scope, $interval) {
  
    // store the interval promise in this variable
    var promise;
  
    // simulated items array
    $scope.items = [];
    
    // starts the interval
    $scope.start = function() {
      // stops any running interval to avoid two intervals running at the same time
      $scope.stop(); 
      
      // store the interval promise
      promise = $interval(setRandomizedCollection, 1000);
    };
  
    // stops the interval
    $scope.stop = function() {
      $interval.cancel(promise);
    };
  
    // starting the interval by default
    $scope.start();
 
    // stops the interval when the scope is destroyed,
    // this usually happens when a route is changed and 
    // the ItemsController $scope gets destroyed. The
    // destruction of the ItemsController scope does not
    // guarantee the stopping of any intervals, you must
    // be responsible for stopping it when the scope is
    // is destroyed.
    $scope.$on('$destroy', function() {
      $scope.stop();
    });
            
    function setRandomizedCollection() {
      // items to randomize 1 - 11
      var randomItems = parseInt(Math.random() * 10 + 1); 
        
      // empties the items array
      $scope.items.length = 0; 
      
      // loop through random N times
      while(randomItems--) {
        
        // Push random number from 1 - 10000 to $scope.items
        $scope.items.Push(parseInt(Math.random() * 10000 + 1)); 
      }
    }
  
  });
<div ng-app="app" ng-controller="ItemController">
  
  <!-- Event trigger to start the interval -->
  <button type="button" ng-click="start()">Start Interval</button>
  
  <!-- Event trigger to stop the interval -->
  <button type="button" ng-click="stop()">Stop Interval</button>
  
  <!-- display all the random items -->
  <ul>
    <li ng-repeat="item in items track by $index" ng-bind="item"></li>
  </ul>
  <!-- end of display -->
</div>

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

142
ryeballar
var interval = $interval(function() {
  console.log('say hello');
}, 1000);

$interval.cancel(interval);
35
Arun Sharma
var promise = $interval(function(){
    if($location.path() == '/landing'){
        $rootScope.$emit('testData',"test");
        $interval.cancel(promise);
    }
},2000);
9
Jijo Paulose
    $scope.toggleRightDelayed = function(){
        var myInterval = $interval(function(){
            $scope.toggleRight();
        },1000,1)
        .then(function(){
            $interval.cancel(myInterval);
        });
    };
1
Christian Bonato

Lorsque vous souhaitez créer une promesse de magasin d'intervalle à variable:

var p = $interval(function() { ... },1000);

Et quand vous voulez arrêter/effacer l'intervalle, utilisez simplement:

$interval.cancel(p);
0
pixparker