2015-03-26 19 views
10

Sto iniziando con Angular tramite Ionic Framework ma non riesco a capire perché il controller funziona solo una volta, cioè cambio stato, il controller gira, passa a un altro stato e poi torna indietro di nuovo e il controller non viene eseguito una seconda volta. Questo è il mio stato:Angolare/ionico - il controller funziona solo una volta

$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; 

    } 
}); 

in un altro Stato, se si fa clic su un pulsante relativo ad un "fermo", salva le "imprese" dei dati nella memoria locale. Lo stato sopra mostra le aziende in cui hai precedentemente fatto clic. Ma non riesco a capire come aggiornare il $scope.firms correttamente come il controller non viene mai eseguito nuovamente.

Qualcuno può darmi una mano?

risposta

22

È possibile inserire il codice che si desidera eseguire in $ ionicView.enter:

controller : function($scope, $cordovaSQLite){ 
    $scope.$on('$ionicView.enter', function() { 
     // code to run each time view is entered 
    }); 

    ... 
}); 

vedere "vista LifeCycle and Events": http://ionicframework.com/docs/api/directive/ionView/

2

Ionic ha un meccanismo di cache all'interno. È possibile disabilitare la cache globalmente nella propria funzione di configurazione in questo modo:

$ionicConfigProvider.views.maxCache(0); 
4

Non è necessario disabilitare l'intera cache dell'app. Se si desidera eseguire nuovamente regolatore ogni volta che si entra su di esso si dovrebbe cancellare la cache prima di partire è:

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

Domanda veloce, questo cancella tutta la cache, puoi cancellare la cache per quello stato? –

+0

Penso che cache chiara in modo dinamico per un solo stato non sia ancora possibile.puoi configurare lo stato in modo che non venga memorizzato nella cache, ma in questo modo lo stato non verrà mai memorizzato nella cache –

+0

come nel modo in cui @brandyshea ha dimostrato? ok evviva –

2

Dieci in ioni-view.

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

5

Sulla risposta di @ brandyshea, vorrei aggiungere, se si desidera specificare alcuna memorizzazione nella cache in un settore/regolatore/Stato, e sfruttare il caching in altri settori, si può semplicemente utilizzare il parametro cache nel proprio $stateProvider per quello stato.

disabilitare la cache all'interno di fornitore di Stato

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

In alternativa, è possibile utilizzare uno degli altri metodi troppo:

disabilitare la cache con un attributo

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

Disabilita la cache globale LY Il $ ionicConfigProvider può essere utilizzato per impostare i punti di vista massimi consentiti che possono essere memorizzati nella cache, ma questo può anche essere utilizzato per disattivare la memorizzazione nella cache impostandolo a 0.

$ionicConfigProvider.views.maxCache(0); 

Riferimenti: http://ionicframework.com/docs/api/directive/ionNavView/ e http://ionicframework.com/docs/api/directive/ionView/

Problemi correlati