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
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.
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.
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.
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?
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.
The $interval function can be cancelled by making use of its cancel method which accepts the object of the $interval function to be cancelled.
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>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With