2015-09-24 16 views
7

Ho una vista che viene aggiornata dopo 1 minuto, interrompo il timer dopo aver lasciato questa visualizzazione e tutto è OK. Dopo il ritorno alla visualizzazione corrente, il timer non si riavvia nuovamente.

Questo è il codice del controllore di questa visione:

.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"; 

}); 

risposta

4

risolvo il problema, Ci non è un problema con la cache, ma con l'aggiornamento funzione che non è chiamato dopo il rientro sulla pagina. sposto la funzione di aggiornamento all'interno del $ ionicView.enter: Il codice corretto è:

$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); 
    }); 
    }(); 
    }); 
+0

Questo era il problema. È sempre possibile utilizzare il servizio angolare [$ interval] (https://docs.angularjs.org/api/ng/service/$interval). – LeftyX

0

Quando si torna alla visualizzazione corrente, viene dalla cache, in modo che il controller non funziona di nuovo. È possibile disattivare la memorizzazione nella cache nella sezione di configurazione della vostra applicazione con l'aggiunta di questa riga di codice:

$ionicConfigProvider.views.maxCache(0); 

oppure è possibile disabilitare la cache su una vista specifica nella parte routing addding di cache: false proprietà.

Maggiori informazioni here e here

+0

ho la cache hanno già impostato falso per la vista corrente: sul modello Indice ho impostato: ..... ... – ingalb

+0

Hai provato la versione .config della disabilitazione della cache? – Emre

-1

Nel codice la funzione del controller non chiama sul cambiamento di vista. chiama la funzione $ timeout al di fuori della funzione di aggiornamento var. Ogni volta che carica la vista, chiama il suo controller e chiama le funzioni anonime o self-executing nel loro ambito.

.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 ($ portata) {

$scope.test = "View 2"; 

});