添加和检索会话存储

Adding and retrieving from sessionStorage

本文关键字:存储 会话 检索 添加      更新时间:2023-09-26

我正在使用Angulars$window sessionStorage服务。我需要做的是将服务中承诺的成功添加到 sessionStorage 中,以便可以在整个应用程序中使用它。

这是我一直在尝试的:

$window.sessionStorage.setItem('promoImages',success);

成功是从服务返回的对象数组,在此结构中:

[{
  promotion: {},
  url: 'images/image1.png'
 },
 {},
 {}];

因此,应通过上面的行将此结构分配给促销图像。但是,当我像这样打印值时:

 $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

我在会话存储方面做错了什么?会话存储只能添加到创建它的同一文件中吗?(我不这么认为)。

谢谢

编辑

感谢下面的人的回答 - 但我认为值得指出的是,在我的对象上使用 stringify 函数时,实际上在对象中添加了正斜杠代替空格......

您只能将字符串存储在 SessionStorage 中。在调用setItem()之前字符串化对象

来自 MDN:

存储.setItem

参数

键名称

包含要创建/更新的密钥名称的 DOMString。

键值

一个 DOMString,其中包含要为正在创建/更新的密钥提供的值。

您只能在 sessionStorage 中存储字符串,因此在存储它之前,首先执行 stringify(),然后在检索时再次将其解析为 JSON。

保存时:

$window.sessionStorage.setItem("JsonObj", JSON.stringify([
   {url: ""},{},{}
]));

检索时:

JSON.parse($window.sessionStorage.JsonObj)[0].url