在localStorage中存储对象

Khu*_*shi 31 javascript typescript angular

我有这样一个数组:

[{name:"test", time:"Date 2017-02-03T08:38:04.449Z"}]
Run Code Online (Sandbox Code Playgroud)

我存储它,localstorage当我从中检索数据时localstorage得到了值:

[object, object]
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

config.ts

import { Injectable } from "@angular/core";

@Injectable()
export class TokenManager {

  public tokenKey: string = 'app_token';

  constructor() { }    

  store(content) {
    var contentData;

    console.log("inside localstorsge store:", content);
    contentData = content.map(
      (data) => data.name
    )
    console.log("contentData:", contentData)
    localStorage.setItem(this.tokenKey, content);
  }

  retrieve() {
    console.log("inside localstorage");
    let storedToken: any = localStorage.getItem(this.tokenKey);
    console.log("storedToken:", storedToken);//====> here this console is[object object]
    if (!storedToken) throw 'no token found';
    return storedToken;
  }

}
Run Code Online (Sandbox Code Playgroud)

Cur*_*dev 60

本地存储仅限于处理字符串键/值对,您可以像下面一样使用JSON.stringify和获取值JSON.parse

var testObject ={name:"test", time:"Date 2017-02-03T08:38:04.449Z"};
Run Code Online (Sandbox Code Playgroud)

将对象存入存储:

localStorage.setItem('testObject', JSON.stringify(testObject));
Run Code Online (Sandbox Code Playgroud)

从存储中检索对象:

var retrievedObject = localStorage.getItem('testObject');

console.log('retrievedObject: ', JSON.parse(retrievedObject));
Run Code Online (Sandbox Code Playgroud)


小智 10

如果没有字符串格式,则无法存储某些内容。

LocalStorage始终以字符串格式存储键和值。

这就是为什么您应该将数据转换为字符串,无论它是ArrayObject

要将数据存储在 localStorage 中,首先使用JSON.stringify()方法对其进行字符串化。

var myObj = [{name:"test", time:"Date 2017-02-03T08:38:04.449Z"}];
localStorage.setItem('item', JSON.stringify(myObj));
Run Code Online (Sandbox Code Playgroud)

然后当你想要检索数据时,你需要再次将String解析为Object。

var getObj = JSON.parse(localStorage.getItem('item'));
Run Code Online (Sandbox Code Playgroud)


Abo*_*ian 7

回答有点晚了,但是我想回答,直到将来的观众可以使用它,javascript通过引用使用对象,然后当我们将对象存储到localStorage时,实际上我们存储的是对象的地址,而不是对象的内容!然后,如果我们要存储对象内容(绝对是我们想要的),则应执行以下操作:

像这样存储:

localStorage.setItem('my_item', JSON.stringify(my_object));   
Run Code Online (Sandbox Code Playgroud)

并像这样使用:

var my_object = JSON.parse(localStorage.getItem('my_item'));
Run Code Online (Sandbox Code Playgroud)

希望对您有所帮助:)