我正在使用Angulars $ window service for sessionStorage。我需要做的是将服务中的promise的成功添加到sessionStorage中,以便可以在整个应用程序中使用它。
以下是我一直在尝试的事情:
$window.sessionStorage.setItem('promoImages',success);
success是从服务返回的对象数组,在此结构中:
[{
promotion: {},
url: 'images/image1.png'
},
{},
{}];
因此,应通过上面的行将此结构分配给promoImages。但是,当我打印这样的值时:
$log.debug('Promo from session:'+JSON.stringify($window.sessionStorage.promoImages));
我得到以下内容:
Promo from session:"[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]"
如果我对成功数组和会话数组采取相同的行动,我会得到不同的结果 - 会话数组返回未定义 - 为什么?
$log.debug('Success:'+JSON.stringify(success[0].url));
// Returns url above
$log.debug('Promo from session:'+JSON.stringify($window.sessionStorage.promoImages[0].url));
// Returns undefined
关于sessionStorage,我做错了什么? sessionStorage只能添加到创建它的同一个文件中吗? (我不这么认为)。
由于
编辑
感谢下面的人提供他们的答案 - 但我认为值得指出的是,stringify函数在我的对象上使用时,实际上将正斜杠添加到对象中代替空白...... / p>
答案 0 :(得分:2)
您只能在SessionStorage中存储字符串。在调用setItem()
来自MDN:
Storage.setItem
参数
密钥名称
包含您要创建/更新的密钥名称的DOMString。
键值
包含您要为要创建/更新的密钥的值的DOMString。
答案 1 :(得分:1)
你只能在sessionStorage中存储字符串,所以在存储它之前,先做stringify(),然后在检索时再将它解析为JSON。
保存时:
$window.sessionStorage.setItem("JsonObj", JSON.stringify([
{url: ""},{},{}
]));
在检索时:
JSON.parse($window.sessionStorage.JsonObj)[0].url