2015-09-24 11 views
7

Ich habe eine Ansicht, die nach 1 Minute aktualisiert wird, ich stoppe den Timer nach dem Verlassen dieser Ansicht, und alles ist in Ordnung. Nach dem Zurückkehren zur aktuellen Ansicht wird der Timer nicht erneut gestartet.

Dies ist der Code der Steuerung dieser Ansicht:

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

}); 

Antwort

4

ich das Problem beheben, Es gibt kein Problem mit dem Cache, aber mit der Funktion Update, das nicht aufgerufen wird, nachdem ich auf der Seite erneut eingeben. Ich bewege die Update-Funktion innerhalb des $ ionicView.enter: Der korrigierte Code ist:

$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

Das war das Problem. Sie können immer den angularen Service [$ interval] (https://docs.angularjs.org/api/ng/service/$interval) verwenden. – LeftyX

0

Wenn Sie auf aktuelle Ansicht zurück, es aus dem Cache kommt, so dass der Controller nicht funktioniert wieder. Sie können durch das Hinzufügen dieser Zeile Code-Caching in der Config-Abschnitt Ihrer App deaktivieren:

$ionicConfigProvider.views.maxCache(0); 

oder Sie können durch addding Cache-Cache auf einer bestimmten Ansicht in der Routing-Teil deaktivieren: false Eigenschaft.

Weitere Informationen here und here

+0

ich bereits gesetzt Cache falsch auf die aktuelle Ansicht: Auf der Index-Vorlage I festgelegt haben: ..... ... – ingalb

+0

Haben Sie versucht, die .config-Version des Cache zu deaktivieren? – Emre

-1

In Ihrem Code Ihrer Controller-Funktion nicht über den Wechsel der Ansicht nicht nennen. Aufruf der $ timeout Funktion außerhalb der var update Funktion. Jedes Mal, wenn die Ansicht geladen wird, ruft sie ihren Controller auf und ruft anonyme oder selbstausführende Funktionen in ihrem Bereich auf.

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

});