Robię demo, w którym pobieram dane z serwera po regularnych odstępach czasu za pomocą $interval
Teraz muszę to zatrzymać / anulować.
Jak mogę to osiągnąć? Jeśli muszę ponownie uruchomić proces, jak mam to zrobić?
Po drugie, mam jeszcze jedno pytanie: pobieram dane z serwera w określonych odstępach czasu. Czy istnieje potrzeba użycia $scope.apply
lub $scope.watch
?
Oto mój 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')
}) ;
}
});
źródło
apply()
, jeśli korzystasz z$interval
usługi, ponieważ robi to za Ciebie. Ale jeśli używasz wbudowanegosetInterval()
, być może będziesz musiał użyć$scope.$apply()
.$destroy
Działa dobrze wraz zhttp-auth-interceptor
jak w moim przypadku, gdzie chcę, aby zatrzymać interwał podczas auth awarii (jak sesja wygasł) i uruchomić ponownie po udanym auth. Dziękuję za to doskonałe rozwiązanie.var interval = $interval(function() { console.log('say hello'); }, 1000); $interval.cancel(interval);
źródło
var promise = $interval(function(){ if($location.path() == '/landing'){ $rootScope.$emit('testData',"test"); $interval.cancel(promise); } },2000);
źródło
$location.path()
$scope.toggleRightDelayed = function(){ var myInterval = $interval(function(){ $scope.toggleRight(); },1000,1) .then(function(){ $interval.cancel(myInterval); }); };
źródło
Jeśli chcesz utworzyć obietnicę magazynu okresowego dla zmiennej:
var p = $interval(function() { ... },1000);
A kiedy chcesz zatrzymać / wyczyścić interwał, po prostu użyj:
źródło