2014-09-30 18 views
0

我需要一個解決方案以角度方式更改和訪問基於會話的存儲中的值。Angular中的SessionStorage:訪問和更改應用程序中的存儲(緩存工廠,ngStorage)

我需要訪問它的部分代碼是這樣的:

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, '[email protected]'); 
AuthService.set(token, '12345'); 
AuthService.set(auth, true); 

不過的getter/setter很爛,這不是20世紀90年代。以上也不起作用。有任何想法嗎?我需要一個服務來緩存sessionStorage中的數據嗎?請記住,我需要在根作用域(以及其他任何地方)訪問它。

因此$scope.$storage = $localStorage將失敗。

是的,這個問題是ngStorage特有的,但Angular自己的cacheFactory的設置應該是一樣的。

Plunkrhttp://plnkr.co/edit/GQomw4LqHCi7MJZTHZIG?p=preview

+1

嘗試''email'':'AuthService.set('email','[email protected]');' – 2014-09-30 09:44:50

+0

添加了一個Plunkr。 – nottinhill 2014-09-30 10:34:04

回答

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

+0

您的代碼有效。雖然我發現奇怪的是'$ rootScope.storage = $ localStorage;'在訪問服務後出現。所以我刪除了它 - 瞧,我們根本不需要rootScope。奇怪的是,如果我從注入中刪除它,應用程序會掛起(請參閱firebug輸出)。所以本質上這是另一個因爲它的代碼進一步減少:http://plnkr.co/edit/PLIJPeus88FfpwuFjEFe?p=preview但是爲什麼在注入時需要rootScope,爲什麼我們自動綁定到它? – nottinhill 2014-09-30 11:48:57

+0

@Sir Ben Benji:它掛起是因爲'$ rootScope.storage'將會是未定義的,當訪問'$ rootScope.storage ['email']' – 2014-09-30 11:53:47

+0

@Sir Ben Benji時會導致異常:實際上,我們不需要指定$ rootScope,正如我在我的回答中所說的。我想你只需要這個,以防你需要使用'$ rootScope.storage'進行數據綁定。 – 2014-09-30 11:59:20

相關問題