2015-12-04 12 views
8

Im usando ui.router e compreso il mio navigazione come questo nel mio principale file html:AngularJs: NG-se reagire troppo tardi

<header ng-if-start="logedin()"></header> 
<navigation ng-if-end="logedin()"></navigation> 

il booleano logedin() sarà impostato attraverso il angular.module().run() in questa funzione:

$rootScope.$on('$stateChangeStart', function(e, to) 

se clicco disconnessione in una delle zone di navigazione, il controllore della navigazione attiverà questa funzione:

$scope.logout = function() { 
    store.remove('jwt'); 
    $state.go('login'); 
} 

Il problema è dopo lo $state.go la navigazione non si nasconde, ma dopo l'aggiornamento della pagina.

Devo rieseguire il modello di indice principale/vista (e poi come)? O come potrei risolvere questo problema?

+0

'ng-if-end' non serve per' logedin() 'cambia' ng-if-end = "logedin" 'per solo' ng-if-end' – stalin

+0

oh sì grazie! – orgertot

+1

che risolve il tuo problema? – stalin

risposta

4

Quindi l'ho risolto io stesso. Ci scusiamo per non aver fornito il metodo logedin().

Il problema era:

$scope.logedin = function() { 
return $rootScope.logedin 
} 

Il $rootScope.logedin è stato fissato nel angular.module().run() -funzione.

Per risolverlo ho dovuto creare un semplice servizio getter/setter.

angular.module('sample') 
    .service('sharedLogedIn', function() { 
     var property = true; 

     return { 
      getProperty: function() { 
       return property; 
      }, 
      setProperty: function(value) { 
       property = value; 
      } 
     }; 
    }); 
1

Buono a sapersi, il problema è stato risolto. Che cosa potrebbe accadere è i valori non vengono propagate ... potrei fare questo per risolvere i problemi:

<header ng-if="loggedinBool"></header> 
<navigation ng-if="loggedinBool"></navigation> 

1) Assegnare il valore loggedin() a una proprietà modello di ambito o di servizio (preferibilmente) loggedinBool e vedere se i valori vengono propagati dopo il logout che cambia il valore di loggedinBool.

2) Se ciò non funziona, provare $ broadcast/$ emettere in uscita e acquisire quello per modificare il valore di loggedinBool. Questo dovrebbe fornire automaticamente il binding bidirezionale altrimenti provare $ scope.digest() o $ scope.apply() per vedere se i valori si propagano.

Problemi correlati