2014-10-28 56 views
0

目前我正在使用$ window.sessionStorage.token,因此如果用戶刷新頁面,它會維護其會話而不會丟失任何數據。但是現在我想在不同的標籤中打開,但它要求我再次登錄。在做了一些研究之後,我發現我必須使用localStorage。在Angularjs中的localStorage之間共享標籤

故障問題 -

1)我將如何共享使用本地存儲標籤之間的會話? 2)是否有另一種解決這個問題的方法?

我已經檢查了大部分帖子,並沒有給予很好的理解。如果任何人都可以幫助理解這個基本的例子將是偉大的,非常感謝。

+1

你嘗試更換' sessionStorage'與'localStorage'?兩者都使用相同的[存儲API](http://www.w3.org/TR/webstorage/#storage)。 – 2014-10-28 02:00:18

+0

我沒試過。但它的工作。感覺很愚蠢。我有角度本地存儲的側軌。謝謝 – GeekOnGadgets 2014-10-28 02:08:48

+0

如果你通過其他標籤訪問,你應該使用localStorage使用sessionStorage訪問只在同一個標​​籤..但我想知道爲什麼你必須顯示其他標籤,而使用angularJS? – 2014-10-28 02:09:12

回答

1

您需要一個服務來注入每個控制器或用於統一訪問的$ rootScope。我正在做一個角度的應用程序相同的事情。這是我的版本,讓你開始。你看他的代碼中使用Authutils服務是http://bitwiseshiftleft.github.io/sjcl/斯坦福大學的Javascript加密庫的實現安全的層添加到存儲資源,因爲它們很容易看到與瀏覽器的調試工具:

angular.module('myApp').service('Dataservice', [ 
'Authutils', 
function Dataservice(Authutils) { 
    var _test = [1, 2, 3]; 

    var hasStorage = function() { 
     if (Modernizr.localstorage) { 
      return true; 
     } else { 
      return false; 
     } 
    }; 

    var _get = function(key, make, init_data) { 
     var out = []; 
     var create = typeof make !== "undefined" ? make : false; 
     var data = typeof init_data !== "undefined" ? init_data : false; 

     if (hasStorage()) { 
      var sval = localStorage.getItem(key); 
      if (!!sval) { 
       try { 
        sval = Authutils.decrypt(sval); 
        out = JSON.parse(sval); 
       } catch (e) { 

       } 
      } else { 
       if (create) { 
        if (data) { 
         data = Authutils.encrypt(data); 
         _set(key, data); 
        } else { 
         _set(key, []); 
        } 
       } 
      } 
     } 
     return out; 
    }; 

    var _set = function(key, value) { 
     if (hasStorage()) { 
      var subject = JSON.stringify(value); 
      localStorage.setItem(key, Authutils.encrypt(subject)); 
      return true; 
     } 
     return false; 
    }; 

    var _drop = function(key) { 
     if (hasStorage()) { 
      localStorage.removeItem(key); 
      return true; 
     } 
     return false; 
    }; 

    var _nuke = function() { 
     if (hasStorage()) { 
      localStorage.clear(); 
      return true; 
     } 
     return false; 
    }; 

    var _push = function(key, value) { 
     var out = []; 
     if (hasStorage()) { 
      var current = JSON.parse(localStorage.getItem(key)); 
      if (!!current) { 
       current.push(value); 
       _set(key, current); 
      } 
     } 
     return out; 
    }; 

    return { 
     get: function(key, make, init_data) { 
      return _get(key, make, init_data); 
     }, 
     set: function(key, value) { 
      _set(key, value); 
     }, 
     push: function(key, value) { 
      _push(key, value); 
     }, 
     trash: function(key) { 
      _cut(key); 
     }, 
     nuke: function() { 
      _nuke(); 
     }, 
     test: function() { 
      return _test; 
     } 
    }; 
    } 
]); 
+0

非常好:)。你介意創建一個Plunker嗎?所以像我們這樣的初學者有更好的理解。感謝您的回答 – GeekOnGadgets 2014-10-28 20:53:42

相關問題