Javascript Angularjs中的本地存储在选项卡之间共享
目前我正在使用$window.sessionStorage.token,因此如果用户刷新页面,它将在不丢失任何数据的情况下维护其会话。但现在我想打开不同的标签,但它要求我再次登录。在做了一些研究之后,我发现我必须使用本地存储 问题- 1) 如何使用本地存储在选项卡之间共享会话? 2) 有没有其他办法解决这个问题Javascript Angularjs中的本地存储在选项卡之间共享,javascript,angularjs,local-storage,Javascript,Angularjs,Local Storage,目前我正在使用$window.sessionStorage.token,因此如果用户刷新页面,它将在不丢失任何数据的情况下维护其会话。但现在我想打开不同的标签,但它要求我再次登录。在做了一些研究之后,我发现我必须使用本地存储 问题- 1) 如何使用本地存储在选项卡之间共享会话? 2) 有没有其他办法解决这个问题 我已经检查了大部分的帖子,没有给出很好的理解。如果有人能通过基本示例帮助理解这一点,那将非常感谢。您需要一个服务来注入每个控制器或$rootScope以实现统一访问。我用angular应
我已经检查了大部分的帖子,没有给出很好的理解。如果有人能通过基本示例帮助理解这一点,那将非常感谢。您需要一个服务来注入每个控制器或$rootScope以实现统一访问。我用angular应用程序做同样的事情。这是我的版本,让你开始。代码中使用的Authutils服务是Stanford Javascript Crypto Library的一个实现,用于为存储的资源添加一层安全性,因为通过浏览器调试工具可以很容易地看到这些资源:
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;
}
};
}
]);
您是否尝试将
会话存储
替换为本地存储
?两种方法都是一样的,我没有试过。但它奏效了。我觉得自己很愚蠢。我得到了有角度的本地存储的侧线。谢谢如果您通过其他选项卡进行访问,则应仅在同一选项卡中使用使用sessionStorage access的localStorage。。但我想知道为什么你在使用angularJS时必须显示给其他选项卡?@DatzMe你的意思是说我应该避免在angularJS中这样做?因为它将失去作为单页应用程序的意义?。你介意详细解释一下吗?这取决于你做这件事的目的。。我实际上在使用angularJS,但没有时间在其他选项卡中使用它查看。。这取决于使用它的目的或场景…非常好:)。你介意创建一个Plunker吗?因此,对于像我们这样的新手来说,他们有更好的理解。谢谢你的回答