Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to clear or stop timeInterval in angularjs?

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 achieve this? If I need to restart the process, how should I do that?

Secondly, I have one more question: I am fetching data from the server after reqular intervals of time. Is there any need to use $scope.apply or $scope.watch?

Here is my 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

like image 897
user944513 Avatar asked Oct 19 '14 06:10

user944513


People also ask

How to stop setInterval in AngularJS?

To cancel an interval, call $interval. cancel(promise) . In tests you can use $interval. flush(millis) to move forward by millis milliseconds and trigger any functions scheduled to run in that time.

What is $interval in AngularJS?

AngularJS includes $interval service which performs the same task as setInterval() method in JavaScript. The $interval is a wrapper for setInterval() method, so that it will be easy to override, remove or mocked for testing. The $interval service executes the specified function on every specified milliseconds duration.

How to use the $interval method in AngularJS?

The AngularJS $interval makes use of the JavaScript setInterval method and works in the exact same way. Just like the JavaScript setInterval method, we can also Start, Stop and Cancel (Destroy) the AngularJS $interval function.

What is $timeout and $interval in AngularJS?

The $interval and $timeout is angular wrapper of setTimeout and setInterval JavaScript function.This angularjs tutorial help to create simple example of timer services timeout and interval, Both timer services are belongs to window object. Where Do We Use $timeout and $interval?

How do I stop a timer set in Java?

Display the time once every second. Use clearInterval () to stop the time: More examples below. The clearInterval () method clears a timer set with the setInterval () method. To clear an interval, use the id returned from setInterval (): Required.

How to cancel the $interval function in JavaScript?

The $interval function can be cancelled by making use of its cancel method which accepts the object of the $interval function to be cancelled.


1 Answers

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>
like image 127
ryeballar Avatar answered Oct 24 '22 20:10

ryeballar