2015-05-13 11 views
5

ho avuto un controller di nome newGroupCtrl la cui definizione è come:AngularJS Reinitialize regolatore

.state('new_group', { 
    url: '/new_group', 
    templateUrl: 'templates/new_group.html', 
    controller: 'newGroupCtrl' 
}) 

.controller('newGroupCtrl', function ($scope, $rootScope,$ionicHistory,$window) { 
    $rootScope.roomId = $scope.getRoom(); 

    $scope.getRoom = function() { 
     var date = new Date; 
     var minutes = date.getMinutes(); 
     var hour = date.getHours(); 
     return 'room_' + hour + '' + minutes; 
    }; 
} 

raggiungo questo contoller dalla pagina precedente da:

$window.location.href = ('#/new_group'); 

che è buono fino ad ora. La variabile $rootScope.roomId viene inizializzata correttamente nel controller newGroupCtrl.

Da questa pagina new_group, si passa a un'altra pagina. E quando torno a questa pagina chiamando lo $window.location.href = ('#/new_group');, $rootScope.roomId non viene nuovamente inizializzato, invece il suo vecchio valore è ancora lì. Lo stato del nuovoGroupCtrl viene mantenuto.

Come posso reinizializzare completamente newGroupCtrl?

+0

Cosa fa il getRoom()? puoi condividere i dettagli del codice? –

+0

Ho aggiunto anche il codice getRoom – Ozgen

+1

Dato che stai usando ui-router, dovresti navigare con il servizio $ state. $ State.go ('nuovo_gruppo'); – Okazari

risposta

5

Dovete dire state che ricaricare regolatore ogni volta che si accede all'URL tramite browser aggiungendo semplicemente l'opzione di stato reload a true come reload: true.

Codice

.state('new_group', { 
    url: '/new_group', 
    templateUrl: 'templates/new_group.html', 
    controller: 'newGroupCtrl', 
    reload: true //will reload controller when state is being access 
}); 

Si consiglia di utilizzare $state.go('new_group') invece di fare $window.location.href = ('#/new_group');, che farà in modo che i cambiamenti di rotta riconosceranno da ui-router.

Same SO answer qui

0

Rimuovere il controller da:

.state('new_group', { 
    url: '/new_group', 
    templateUrl: 'templates/new_group.html', 
}) 

E aggiungere il controller a pagina "new_group.html" con la modifica di padre della pagina come:

<div ng-controller="newGroupCtrl"></div> 
+1

questo sembra soluzione hacky ..: p –

2

Dal momento che si sta utilizzando Framework ionico (Good Job), si può fare questo:

.controller('YourCtrl', function($ionicView){ 
    $ionicView.enter(function(){ 
    //code that you want to run, each time the view is active 
    }); 
}); 
Problemi correlati