2015-03-26 14 views
10

Zaczynam od Angulara przez Ionic Framework, ale nie rozumiem, dlaczego kontroler działa tylko raz, tzn. Zmieniam stan, kontroler działa, zmienia się na inny stan, a następnie wraca ponownie i kontroler nie uruchamia się po raz drugi. To jest mój stan:Angular/Ionic - kontroler działa tylko raz

$stateProvider.state('container.previous', { 
    url: 'previous', 
    views: { 
     main : { 
      templateUrl : 'views/previous.html', 
      controller : function($scope, $cordovaSQLite){ 
       $scope.firms = []; 
       $cordovaSQLite.execute(window.db, "SELECT * FROM recent GROUP BY phone ORDER by id DESC").then(function(res) { 
        for (i = 0; i < res.rows.length; i++) { 
         $scope.firms.push(res.rows.item(i)); 
        } 
       }, function (err) { 
        console.error(err); 
       }); 
      } 
     } 
    }, 
    onStateChangeStart : function(){ 
     backButton = true; 

    } 
}); 

w innym stanie, jeśli klikniesz na przycisku związanego z „firmy”, to zapisuje „firmy” dane do pamięci lokalnej. Powyższy stan pokazuje firmy, w których wcześniej kliknąłeś. Ale nie mogę się dowiedzieć, jak poprawnie zaktualizować $scope.firms, ponieważ kontroler nigdy nie uruchamia się ponownie.

Czy ktoś może mi pomóc?

Odpowiedz

2

Ionic ma wbudowany mechanizm pamięci podręcznej. Możesz wyłączyć buforowanie globalnie w swojej funkcji konfiguracyjnej w następujący sposób:

$ionicConfigProvider.views.maxCache(0); 
4

Nie musisz wyłączać całej pamięci podręcznej aplikacji. Jeśli chcesz ponownie uruchomić regulatorowi za każdym razem wpisać na nim należy wyczyścić pamięć podręczną przed opuszczeniem go:

$scope.$on("$ionicView.afterLeave", function() { 
     $ionicHistory.clearCache(); 
}); 
+0

Szybkie pytanie, to czyści całą pamięć podręczną, czy możesz wyczyścić pamięć podręczną dla tego jednego stanu? –

+0

Sądzę, że jasne buforowanie dinozaurów tylko dla jednego stanu nie jest jeszcze możliwe.możesz skonfigurować swój stan tak, aby nie był buforowany, ale w ten sposób ten stan nigdy nie zostanie zbuforowany –

+0

, podobnie jak w sposobie prezentacji @brandyshea? ok okrzyki –

2

Umieść to w swoim widoku jonów.

<ion-view cache-view="false">

5

Opierając się na odpowiedź @ brandyshea za, chciałbym dodać, jeśli chcesz określić bez buforowania w jednym miejscu/kontroler/państwowej, a także skorzystać z buforowania w innych dziedzinach, ty można po prostu użyć parametru cache w swoim stanie $stateProvider dla tego stanu.

Wyłącz cache w zasięgu operatora państwowego

$stateProvider.state('myState', { 
    cache: false, 
    url : '/myUrl', 
    templateUrl : 'my-template.html' 
}) 

Alternatywnie, można użyć jednej z pozostałych metod zbyt:

Wyłącz cache z atrybutem

<ion-view cache-view="false" view-title="My Title!"> 
... 
</ion-view> 

Wyłącz globalną pamięć podręczną ly $ ionicConfigProvider może być używany do ustawiania maksymalnych dopuszczalnych poglądów, które mogą być buforowane, ale może to być również użyć, aby wyłączyć wszystkie buforowania przez ustawienie go na 0.

$ionicConfigProvider.views.maxCache(0); 

Referencje: http://ionicframework.com/docs/api/directive/ionNavView/ i http://ionicframework.com/docs/api/directive/ionView/

Powiązane problemy