interval angularjs ionic-framework ionic ionic-view

$interval angularjs



AngularJs & Ionic: Detener/Reiniciar $ timeout cuando cambias y vuelves a ver (3)

Tengo una vista que se actualiza después de 1 minuto, detengo el temporizador después de dejar esta vista, y todo está bien. Después de regresar a la vista actual, el temporizador no se reiniciará nuevamente.

Este es el código del controlador de esta vista:

.controller(''IndexCtrl'', function($scope, $timeout, RestService) { var updateN = 60*1000; $scope.test = "View 1 - Update"; var update = function update() { timer = $timeout(update, updateN); /** make a http call to Rest API service and get data **/ RestService.getdata(function(data) {; $scope.items = data.slice(0,2); }); }(); /** Stop the timer before leave the view**/ $scope.$on(''$ionicView.beforeLeave'', function(){ $timeout.cancel(timer); //alert("Before Leave"); }); /** Restart timer **/ $scope.$on(''$ionicView.enter'', function(){ $timeout(update, updateN); //alert("Enter"); }); }) .controller(''ViewCtrl2'', function($scope) { $scope.test = "View 2"; });


Cuando vuelve a la vista actual, proviene de la memoria caché, por lo que el controlador no funciona de nuevo. Puede desactivar el almacenamiento en caché en la sección de configuración de su aplicación agregando esta línea de código:

$ionicConfigProvider.views.maxCache(0);

o puede desactivar la caché en una vista específica en la parte de enrutamiento agregando caché: propiedad de false.

Más información aquí y aquí


Resuelvo el problema, no hay ningún problema con la memoria caché, pero con la actualización de la función que no se llama después de que vuelva a ingresar en la página. Muevo la función de actualización dentro de $ ionicView.enter: el código corregido es:

$scope.$on(''$ionicView.beforeLeave'', function(){ //updateN=12000000; $timeout.cancel(timer); //alert("Leave"); }); $scope.$on(''$ionicView.enter'', function(){ //updateN=12000000; var update = function update() { timer = $timeout(update, updateN); RestService.getdata(function(data) { //console.log(tani); //$scope.items = data; $scope.items = data.slice(0,2); }); }(); });


En su código, su función de controlador no requiere cambio de vista. llamar a la función $ timeout fuera de la función de actualización var. Cada vez que se carga la vista, llame a su controlador y llame a funciones anónimas o autoejecutables en su alcance.

.controller(''IndexCtrl'', function($scope, $timeout, RestService) { var updateN = 60 * 1000; $scope.test = "View 1 - Update"; var update = function update() { var timer = $timeout(update, updateN); /** make a http call to Rest API service and get data **/ RestService.getdata(function(data) {; $scope.items = data.slice(0, 2); }); }(); /** Stop the timer before leave the view**/ $scope.$on(''$ionicView.beforeLeave'', function() { $timeout.cancel(timer); //alert("Before Leave"); }); /** Restart timer **/ $scope.$on(''$ionicView.enter'', function() { timer() });

})

.controller (''ViewCtrl2'', function ($ scope) {

$scope.test = "View 2";

});