How to clear or stop timeInterval in angularjs?

后端 未结 5 1898
不知归路
不知归路 2020-11-30 19:09

I am making a demo in which I am fetching data from the server after regular intervals of time using $interval Now I need to stop/cancel this.

How I can

相关标签:
5条回答
  • 2020-11-30 19:49
    var promise = $interval(function(){
        if($location.path() == '/landing'){
            $rootScope.$emit('testData',"test");
            $interval.cancel(promise);
        }
    },2000);
    
    0 讨论(0)
  • 2020-11-30 19:52

    When you want to create interval store promise to variable:

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

    And when you want to stop / clear the interval simply use:

    $interval.cancel(p);
    
    0 讨论(0)
  • 2020-11-30 19:57
        $scope.toggleRightDelayed = function(){
            var myInterval = $interval(function(){
                $scope.toggleRight();
            },1000,1)
            .then(function(){
                $interval.cancel(myInterval);
            });
        };
    
    0 讨论(0)
  • 2020-11-30 20:02

    You can store the promise returned by the interval and use $interval.cancel() to that promise, which cancels the interval of that promise. To delegate the starting and stopping of the interval, you can create start() and stop() functions whenever you want to stop and start them again from a specific event. I have created a snippet below showing the basics of starting and stopping an interval, by implementing it in view through the use of events (e.g. ng-click) and in the controller.

    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>

    0 讨论(0)
  • 2020-11-30 20:08
    var interval = $interval(function() {
      console.log('say hello');
    }, 1000);
    
    $interval.cancel(interval);
    
    0 讨论(0)
提交回复
热议问题