2015-04-24 13 views
9

Nel mio percorso locale http://localhost:9000/#/deviceDetail/ ho un controller che gestisce quella vista. Prima di passare a quella vista ho impostato alcune variabili su $rootScope (per esempio $rootScope.dashboards).

Una volta in tale vista, ho accesso alla proprietà dashboard, ma quando aggiorno la pagina con la chiave F5, ad esempio, i cruscotti delle proprietà vengono persi.

Ho provato a salvare $rootScope sulla variabile localStorage ma ho avuto problemi di riferimento circolare con il metodo JSON.stringify.

Qualche consiglio per gestirlo?

+0

si può provare con questo [modulo angolare] (http://gregpike.net/demos/angular-local-storage/demo/demo.html) – Guy

+0

penso il tuo problema è che non stai utilizzando un router adeguato e non riesci a caricare i dati necessari sulla modifica della rotta, invece di un'azione come "fare clic". –

risposta

9

AngularJS è un framework JavaScript, tutto è memorizzato nell'heap della memoria e l'heap viene avviato quando si apre una pagina e viene distrutto dopo averlo chiuso. In questo contesto, l'aggiornamento del browser è come chiudere e riaprire la pagina.

Per mantenere il valore dopo aggiornamento, è necessario memorizzare in un cookie, per questo si utilizza per esempio $cookies o sessionStorage/localStorage come raccomandato dal M K.

+3

I cookie sono in realtà una cattiva idea. Dovresti invece usare localStorage. –

+0

L'ho consigliato perché '$ cookies' sono angolari per impostazione predefinita, ma devi accedere a localStorage in" vanilla way "o aggiungere altro modulo. –

+0

OP ha detto di aver provato 'localStorage' e ha avuto dei problemi. Hai risposto "perché" ma non "come" – charlietfl

0

Usa localStorage e $ stateChangerStart verificare se si utilizza ui .route qualcosa di simile

$rootScope.$on('$stateChangeStart', function(event, toState) { 

      // Grab the user from local storage and parse it to an object 
      var user = JSON.parse(localStorage.getItem('user'));    

      if(user) { 

       $rootScope.currentUser = user; 

      } 
     }); 
3

ho cercato di memorizzare autenticazione gettone utilizzando cookie seguendo l'articolo a Getting started with AngularJS and ASP.NET MVC - The long awaited Part Three. Ma i cookie vengono distrutti ogni volta che colpisco F5 o aggiorna il browser Chrome.

Questo articolo dice che ngCookies aiuta ad affrontare l'aggiornamento della pagina per mantenere il token per l'aggiornamento della pagina. E avevo pensato che fosse così e non sapevo che ngCookies mi uccidesse. È stato distrutto se la pagina è aggiornata! dopo ore di ricerche online vedo questo articolo mi aiuta.

Secondo M K, ho usato localStorage (o sessionStorage) mi ha aiutato a sbarazzarmi del mal di testa dei cookie. L'uso dei cookie per memorizzare il token di autenticazione o qualcos'altro è una cattiva idea. Mi sono imbattuto in questo problema e mi sono perso (non conoscevo il bug proveniente da "utilizzo dei cookie") come sopra menzionato/confermato. Quindi, era un bug in quell'articolo.

Grazie milione di volte, M K.

+0

Aveva esattamente questo problema, c'era un bug nell'articolo! ho risolto importando ngStorage in app.module e usato '$ localStorage' e il seguente codice nel mio servizio sessione: ' this.getToken = function() { \t if ($ localStorage.myApp!) { \t \t if (! This.token) { \t \t \t ritorno undefined; \t \t} \t \t this.setToken (this.token); \t} \t return $ localStorage.myApp; } this.setToken = function (token) { \t this.token = token; \t $ localStorage.myApp = token; } ' –

Problemi correlati