2015-04-23 19 views
10

Devo cancellare tutti i valori $scope mentre eseguo alcune operazioni.

Per esempio: se clicco su un pulsante "Signout" per reindirizzare "signin" pagina, poi tutto il $ ambito o $ rootScope valori nella sessione dovrebbe essere cancellata.

Come posso ottenere questo risultato?

+0

Qui trovi alcuni metodi per raggiungere tale: http://stackoverflow.com/questions/13085024/reset-a-model-with-angular-js – frhd

+0

@frhd. Grazie è chiaro. Usando questo esempio possiamo cancellare i valori di $ scope nel controller particolare. Ma voglio cancellare tutti i valori $ scope in tutti i controller durante signout. È possibile? Se sì, dammi il tuo suggerimento/soluzione .. – Gnik

+0

Non penso che ci sia un modo di tipo one-liner per cancellare tutti gli scopi. Come scritto qui http://stackoverflow.com/a/18527334/2491198, dovresti notificare a tutti gli ambiti di cancellare i loro dati. Un modo per evitare di doverlo fare è memorizzare i dati in un ** DataService ** e cancellarli al logout. – frhd

risposta

16

È possibile effettuare le seguenti operazioni:

$rootScope = $rootScope.$new(true); 
$scope = $scope.$new(true); 

La funzione $new sta creando un nuovo ambito che eredita le variabili dal genitore. true impedisce l'ereditarietà.

Ma questo non è l'approccio corretto, perché se si utilizza la cosa di cui sopra, è necessario eseguire il boot delle funzioni dei controller manualmente e ricreare l'albero degli ambiti.

This potrebbe essere utile tuttavia, in cui l'idea è quella di memorizzare i dati inizializzati è memorizzato in alcune variabili e quindi, quando assegnato copiato alle variabili visualizzate.

La soluzione corretta è quella di cancellare manualmente ogni proprietà in ogni ambito l'evento di disconnessione in questo modo: evento Esci:

$rootScope.$emit("logout"); 

Facendo l'evento:

$rootScope.$on("logout", function(){ 
     $rootScope.myData = undefined; 
}); 

O come suggerito nella commenti, per utilizzare un servizio e quindi essere pulito.

0
   You not want delete scope 
       var authScope =['authLogo','currentPath','pageTitle','app'];      
       for (var prop in $rootScope) { 
        if (prop.substring(0,1) !== '$') { 
         if(authScope.indexOf(prop) ==-1) 
          delete $rootScope[prop]; 
        } 
       } 
Problemi correlati