Angularjs中的localStorage在选项卡之间共享
localStorage in Angularjs share between tabs
当前我使用$window.sessionStorage.token,因此如果用户刷新页面,它将在不丢失任何数据的情况下维护会话。但现在我想在不同的选项卡中打开,但它要求我再次登录。经过一些研究,我发现我必须使用localStorage。
问题问题-
1) 如何使用本地存储在选项卡之间共享会话?2) 这个问题还有别的解决办法吗?
我已经查看了大部分的帖子,并没有给出很好的理解。如果有人能用基本的例子来帮助理解这一点,那将是非常好的,也将不胜感激。
您需要一个服务来注入每个控制器或$rootScope以实现统一访问。我正在用一个棱角分明的应用程序做同样的事情。这是我的版本,让你开始。您在代码中看到的Authutils服务是Stanford Javascript Crypto Library的实现,位于http://bitwiseshiftleft.github.io/sjcl/为存储的资源添加一层安全性,因为使用浏览器调试工具可以很容易地看到这些资源:
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;
}
};
}
]);
相关文章:
- 在索引.html和应用.js [node.js] 之间共享变量
- Node.js上的WebSocket,并在所有连接的客户端之间共享消息
- 使用服务(AngularJS)在控制器之间共享数据
- AngularJS中的页面之间共享数据返回空
- 是否可以缓存可下载的文件,并在XHR和非XHR请求之间共享该缓存
- 在Knockoutjs中的ViewModels之间共享变量状态
- 通过共享服务在两个不同ng应用程序中的控制器之间共享数据
- Node.js服务器和浏览器之间共享二进制缓冲区
- 使用Angularjs在两个不同页面的控制器之间共享数据
- 在两个浏览器选项卡之间共享变量范围
- 不同进程之间共享Node.js环境
- 在Angular Bootstrap Modal和父控制器之间共享作用域
- 2ng控制器,并且需要在控制器之间共享数据
- Javascript创建函数,以便在其他函数之间共享变量
- 在控制器angular js之间共享数据
- 在javascript客户端和java服务器之间共享Google Analytics ClientID
- 如何将json文件中的数据提取到对象数组中,并在两个控制器之间共享
- Angular 2,在没有直接关系的两个组件之间共享一个对象
- 在angularJS中使用模态窗口时,在控制器之间共享对象数组
- 在角度上不同控制器之间共享状态