2015-04-24 16 views
9

Na mojej lokalnej trasie http://localhost:9000/#/deviceDetail/ mam kontroler, który zarządza tym widokiem. Przed przejściem do tego widoku ustawiłem pewne zmienne na $rootScope (na przykład $rootScope.dashboards).

Po przejściu do tego widoku mam dostęp do właściwości pulpitów nawigacyjnych, ale po odświeżeniu strony z kluczem F5 na przykład panele kontrolne właściwości zostaną utracone.

Próbowałem zapisać $rootScope na zmiennej localStorage, ale mam problemy z odwołaniami cyklicznymi z metodą JSON.stringify.

Dowolna wskazówka, aby temu zaradzić?

+0

można spróbować z tym modułem kątowym [] (http://gregpike.net/demos/angular-local-storage/demo/demo.html) – Guy

+0

myślę Twoim problemem jest to, że nie używasz właściwego routera i nie udało się załadować niezbędnych danych dotyczących zmiany trasy, zamiast działania typu "kliknij". –

Odpowiedz

9

AngularJS to framework JavaScript, wszystko jest przechowywane w stercie pamięci, a sterty są uruchamiane po otwarciu strony i niszczone po zamknięciu. W tym kontekście odświeżanie przeglądarki przypomina zamykanie i ponowne otwieranie strony.

Aby utrzymać wartość po odświeżeniu, należy przechowywać go w pliku cookie, do tego użyć np $cookies lub sessionStorage/localStorage jako zalecanego przez M K.

+3

Pliki cookie są w rzeczywistości złym pomysłem. Zamiast tego powinieneś użyć localStorage. –

+0

Poleciłem to, ponieważ '$ cookies' są domyślnie kanciaste, ale musisz zrobić dostęp do localStorage w" sposób waniliowy "lub dodać dodatkowy moduł. –

+0

OP powiedział, że wypróbował 'localStorage' i napotkał problemy. Odpowiedziałeś na pytanie "dlaczego", ale nie "jak" – charlietfl

0

Korzystanie localStorage i $ stateChangerStart sprawdzić, czy za pomocą interfejsu .route coś takiego

$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

starałem się zapisać tokenu uwierzytelniania za pomocą plików cookie po artykule na Getting started with AngularJS and ASP.NET MVC - The long awaited Part Three. Ale pliki cookie są niszczone za każdym razem, gdy uderzę w F5 lub odświeżę przeglądarkę Chrome.

Ten artykuł mówi, że ngCookies pomaga radzić sobie z odświeżaniem strony, aby zachować token do odświeżania strony. I myślałem, że to zrobiło i nie wiedziałem, że mnie zabiły. Został zniszczony, jeśli strona jest odświeżana! po godzinach do badań online Widzę, że ten artykuł mi pomaga.

Według M K, użyłem localStorage (lub sessionStorage) pomógł mi pozbyć się bólu głowy ciasteczek. Używanie plików cookie do przechowywania tokena uwierzytelniania lub czegoś innego jest złym pomysłem. Wpadłem na ten problem i zgubiłem się (nie znałem błędu pochodzącego z "używania ciasteczek"), o czym wspomniał/potwierdził powyższy artykuł. Tak więc był to błąd w tym artykule.

Dziękuję milion razy, m K.

+0

Miał dokładnie ten problem, był błąd w tym artykule! Rozwiązałem go poprzez importowanie ngStorage w app.module i używane '$ localStorage' i następujący kod w mojej służbie sesji: ' this.getToken = function() { \t if ($ localStorage.myApp!) { \t \t if (! This.token) { \t \t \t return undefined; \t \t} \t \t this.setToken (this.token); \t} \t return $ localStorage.myApp; } this.setToken = funkcja (token) { \t this.token = token; \t $ localStorage.myApp = token; } ' –