Angular中的SessionStorage:从应用程序中的任何位置访问和更改存储(缓存工厂,ngStorage)

时间:2014-09-30 09:39:40

标签: angularjs

我需要一个解决方案,以角度来改变和访问基于会话的商店中的值。

我需要在代码部分中访问它:

app.run(function($rootScope, $state, $window, $alert, AuthService) {

    $rootScope.$on(

在我的控制器中,在我的HTML中,到处都是。我没有找到解决方案。我尝试了服务(使用ngStorage)

appServices.factory('AuthService', function ($rootScope, $localStorage){
    return {
        set: function(entidy, value) {
            $storage = $localStorage;
            $storage[entidy] = value;
        }

        get: function(entidy) {
            if (typeof $rootScope.$storage != 'undefined') {
                return $rootScope.$storage[entidy];
            }
        }
    }
});

写这样的服务:

AuthService.set(email, 'test@test.de');
AuthService.set(token, '12345');
AuthService.set(auth, true);
但是Getter / Setter很糟糕,这不是20世纪90年代。以上也行不通。有任何想法吗?我是否需要一个服务来缓存sessionStorage中的数据?请记住,我需要在根范围(以及其他任何地方)访问它。

因此$scope.$storage = $localStorage会失败。

是的,这个问题是特定于ngStorage的,但对于Angular自己的cacheFactory,同样的设置应该是正确的。

Plunkr http://plnkr.co/edit/GQomw4LqHCi7MJZTHZIG?p=preview

1 个答案:

答案 0 :(得分:4)

我认为您不需要将$localStorage分配给$rootScope。每当您需要使用$localStorage时,只需将其注入您的代码:

appServices.factory('AuthService', function ($localStorage){
    return {
        set: function(entidy, value) {
            $localStorage[entidy] = value;
        },
        get: function(entidy) {
           return $localStorage[entidy];
        }
    }
});

如果您确实需要通过$rootScope访问该服务,请在.run中再试一步:

app.run(function($rootScope, $localStorage) {
    $rootScope.storage = $localStorage;
});

http://plnkr.co/edit/IeRo3fAtQa6qcJZi1Czp?p=preview

相关问题