从sessionStorage添加和检索

时间:2014-12-29 15:56:20

标签: javascript angularjs

我正在使用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>

2 个答案:

答案 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