web-dev-qa-db-ja.com

Angularjs:ページを更新すると$ rootScopeの値が破壊されるのはなぜですか?

ローカルルート http:// localhost:9000 /#/ deviceDetail / そのビューを管理するコントローラーがあります。そのビューに進む前に、いくつかの変数を$rootScopeに設定します(たとえば$rootScope.dashboards)。

そのビューに入ると、ダッシュボードのプロパティにアクセスできますが、たとえばF5キーでページを更新すると、プロパティのダッシュボードが失われます。

LocalStorage変数に$rootScopeを保存しようとしましたが、JSON.stringifyメソッドで循環参照の問題が発生しました。

それを管理するためのヒントは?

9
gabrielAnzaldo

AngularJSはJavaScriptフレームワークであり、すべてがメモリヒープに格納され、ページを開くとヒープが開始され、ページを閉じるとヒープが破棄されます。このコンテキストでは、ブラウザの更新はページを閉じて再度開くようなものです。

更新後も値を保持するには、値をCookieに保存する必要があります。これには、たとえば $cookies または sessionStorage / localStorage M Kの推奨通り。

10
Marko Grešak

AngularJSとASP.NET MVCの使用開始-待望のパート の記事に従って、Cookieを使用して認証トークンを保存しようとしました。しかし、F5キーを押すか、Chromeブラウザを更新すると、Cookieが破棄されます。

その記事によると、ngCookiesは、ページ更新のトークンを維持するためにページ更新を処理するのに役立ちます。そして私はそれがそうだと思っていました、そして私はngCookiesが私を殺したことを知りませんでした。ページを更新すると破壊されました!数時間後にオンラインで調査したところ、この記事が役に立ちました。

M Kによると、私はlocalStorage(またはsessionStorage)を使用して、Cookieの頭痛を取り除くのに役立ちました。 Cookieを使用して認証トークンなどを保存することはお勧めできません。上記の記事が言及/確認したとおり、私はその問題に遭遇し、道に迷いました(「cookieを使用する」ことから来るバグを知りませんでした)。それで、それはその記事のバグでした。

百万回ありがとう、M K.

3
Thomas.Benz

このようなui.routeを使用している場合は、localStorageおよび$ stateChangerStartチェックを使用してください。

$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;

            }
        });
0
CYBERSIX