从html访问$ window.sessionStorage

时间:2016-06-01 14:07:39

标签: javascript html angularjs

在我的情况下,我正在使用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中保存的值?或者这是错的,我还需要另一种方法吗?

2 个答案:

答案 0 :(得分:2)

您可以通过服务/工厂

来完成
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>

答案 1 :(得分:0)

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