簡體   English   中英

從html訪問$ window.sessionStorage

[英]Access $window.sessionStorage from html

在我的情況下,我正在使用angularjs,我想在用戶中訪問一個保存的值,以顯示或不顯示某些HTML標簽。

首先,它在一些控制器中保存用戶變量,它是登錄操作的一部分。

$window.sessionStorage.setItem('user', AuthenticationService.getUser());

然后,我想根據該用戶的角色顯示一些html標簽,具體如下:

<li><a id="id" ng-if="user.role=='admin'" href> console </a></li>

我使用$ rootScope有類似的東西,但是當我刷新頁面時,我失去了價值。 這就是我需要使用window.sessionStorage的原因

有沒有辦法在html中訪問sessionStorage中保存的值? 或者這是錯的,我需要另一種方法?

您可以通過服務/工廠完成

angular.module('myApp').factory("PrincipalService", [
    "$window",
    function($window){

        var user;

        return {
            getUser : getUser,
            setUser: setUser
        };

        function getUser(){
            return user || angular.fromJson($window.sessionStorage.getItem('user'));
        }

        function setUser(userInfo){
            user = userInfo;
            $window.sessionStorage.setItem('user', angular.toJson(userInfo));
        }

    }
]);

編輯

我可以使用它通過rootScope分享每個視圖的方式:

angular.module("myApp").run(["$rootScope", "PrincipalService",
    function($rootScope, PrincipalService){
        $rootScope.getUser = PrincipalService.getUser;
        $rootScope.setUser = PrincipalService.setUser;
    }
]);

然后,在您的觀點中,您可以致電:

<span>{{$root.getUser()}}</span>

$ window只是窗口的包裝器,所以這種方法可行,但更好的是使用其他方法,如cookie而不是污染$ window。

您應該使用控制器功能,甚至更好的全局用戶服務來訪問用戶。

這里有一篇關於如何做到這一點的非常詳細的文章: http//www.nesterovsky-bros.com/weblog/2015/01/26/windowsessionStorageInAngularJS.aspx

如果您有多個用戶屬性,請使用toJson和fromJson將對象存儲在會話存儲中,例如:

var user = { name:'mike', role: 'admin'}
$window.sessionStorage.setItem('user',angular.toJson(user));

和:

var user = angular.fromJson($window.sessionStorage.getItem('user'))

如果您需要從多個不同的地方訪問用戶,建議使用像@Deblaton這樣的服務,但假設您的用戶有多個屬性,請像上面一樣添加angular.toJson和angular.fromJson行。 。

您在html中訪問用戶的方式要求它出現在當前范圍內,因此如果您在控制器中使用服務方法,則需要添加:

$scope.user = UserService.getUser();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM