2016-11-11 3 views
0

Ich neu mit App und eckig.Abbrechen Intervall, wenn App auf den Hintergrund geht

Meine App verwendet ein Intervall, um den Bereich mit einer Abrufanforderung an den Server zu aktualisieren. Ich möchte, dass das Intervall abgebrochen wird, wenn die App in den Hintergrund wechselt.

sah ich auf andere Posten ‚$ onunload = function()‘, aber ich bin mir nicht sicher, ob es gut ist oder wie es zu benutzen ... Ich versuche: $scope.$onunload=function(){ // Make sure that the interval is destroyed when leaving app $scope.stopRefresh(); };

aber es funktioniert nicht.

Beachten Sie, dass stopRefresh() Funktion Arbeit mit Tab verlassen, es Intervall abzubrechen ...

in anderen Seite ist es eine Möglichkeit, dass ich das Intervall whan Rückwegs fro Hintergrund neu starten können?

hier die volle Controler:

angular.module('starter.controllers', []) 

main.controller("temperatureCtrl", ["$scope", "$rootScope", "$window", "$interval", "ArduinoService", function($scope, $rootScope, $window, $interval, service) { 
    $rootScope.arduinoServerUrl = ''; 
    $rootScope.arduinoServerUrl = $window.localStorage['serverUrl']; 

    var autoRefresh; 
    $scope.channels = []; 

    function onTabSelected() { 
$rootScope.arduinoServerUrl = $window.localStorage['serverUrl']; 
} 

$scope.options = { 
loop: false, 
//effect: 'fade', 
speed: 500, 
} 
$scope.data = {}; 
$scope.$watch('data.slider', function(nv, ov) { 
$scope.slider = $scope.data.slider; 
}) 

function startRefresh() { 
autoRefresh = $interval(function() { 
    updateAjax(); 
}, 5000); 
} 


function updateAjax() { 
service.getChannels(function(err, result) { //get json data 
    if (err) { 
    return alert(err); 
    } 
    // puis les mets dans le scope 
    $scope.channels = result.channels; 
    }) 
}; 

$scope.init = function() { //on load page first get data 
updateAjax(); 
//startRefresh() 
} 


$scope.stopRefresh = function() { 
$interval.cancel(autoRefresh); 
}; 

$scope.restartRefresh = function() { 
startRefresh(); 
}; 

$scope.$on('$ionicView.leave', function() { 
// Make sure that the interval is destroyed when leaving tab 
$scope.stopRefresh(); 
}); 

$scope.$onunload=function(){ 
    // Make sure that the interval is destroyed when leaving app 
$scope.stopRefresh(); 
}; 

$scope.$on('$ionicView.enter', function() { 
//star or restart interval scope update 

$scope.restartRefresh(); 
}); 

$scope.$on('$destroy', function() { 
// Make sure that the interval is destroyed too 
$scope.stopRefresh(); 
}); 

}]); 

Antwort

0

ich, was müssen Sie einige Singletonklasse machen wie in AngularJS 'Service' oder 'Fabrik'. So wie ich es in meinem Code mache und dann annulliere einfach das $ inerval, wenn das Event fortgesetzt wird.

factory('BackgroundCheck', function($ionicPlatform){ 
    var service = {}; 
    var inBackground = false; 

    $ionicPlatform.ready(function() {   
     document.addEventListener("resume", function(){inBackground = false;}, false); 
     document.addEventListener("pause", function(){inBackground = true;}, false); 
    }); 

    service.isActive = function(){ 
     return inBackground == false; 
    } 
    return service;  
}) 

Ich hoffe, dass das für Sie arbeiten wird.

Danke ...

+0

es tut ein bisschen. Ich bin auch neu zu eckig und benutze keine Fabrik ... versuche zu verstehen, was ist ... aber du verstehst was ich machen will ..: P. Kann ich einfach $ interval in die Funktion injizieren und von dort abbrechen? Ist die Fabrik irgendwo anzurufen? Ich weiß, ich bin ein echter Anfänger ...: p – Nitrof

Verwandte Themen