如何清除或停止angularjs中的timeInterval?
我正在做一个演示,我正在从服务器获取数据定期的时间间隔使用$interval
现在我需要停止/取消这个。
我怎么能做到这一点? 如果我需要重新启动过程,我该怎么做?
其次,我还有一个问题:我在时间间隔之后从服务器获取数据。 有没有必要使用$scope.apply
或$scope.watch
?
这是我的老板:
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') }) ; } });
您可以存储由时间间隔返回的许诺,并使用$interval.cancel()
作为承诺,取消承诺的时间间隔。 要委派时间间隔的开始和停止,您可以创buildstart()
和stop()
函数,只要您想停止并从特定事件再次启动它们即可。 我在下面创build了一个片段,展示了启动和停止时间间隔的基础知识,通过在事件中使用事件(例如ng-click
)和控制器来实现。
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>
var interval = $interval(function() { console.log('say hello'); }, 1000); $interval.cancel(interval);
var promise = $interval(function(){ if($location.path() == '/landing'){ $rootScope.$emit('testData',"test"); $interval.cancel(promise); } },2000);
$scope.toggleRightDelayed = function(){ var myInterval = $interval(function(){ $scope.toggleRight(); },1000,1) .then(function(){ $interval.cancel(myInterval); }); };