我正在做一个演示,我在使用 $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')
}) ;
}
});
最佳答案
您可以存储间隔返回的 promise ,并对该 promise 使用 $interval.cancel()
,这会取消该 promise 的间隔。要委托(delegate)间隔的开始和停止,您可以创建 start()
和 stop()
函数,只要您希望从特定事件停止并再次启动它们。我在下面创建了一个片段,展示了开始和停止间隔的基础知识,方法是通过使用事件(例如 ng-click
)在 View 中和在 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>
关于javascript - 如何清除或停止angularjs中的timeInterval?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26447923/