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