在localStorage中存储对象

时间:2017-02-03 09:11:53

标签: javascript angular typescript

我有一个这样的数组:

[{name:"test", time:"Date 2017-02-03T08:38:04.449Z"}]

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

[object, object]

我该如何解决这个问题?

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;
  }

}

5 个答案:

答案 0 :(得分:47)

本地存储仅限于处理您可以执行的字符串键/值对,使用JSON.stringify并获取值JSON.parse

var testObject ={name:"test", time:"Date 2017-02-03T08:38:04.449Z"};

将对象放入存储空间:

localStorage.setItem('testObject', JSON.stringify(testObject));

从存储中检索对象:

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

console.log('retrievedObject: ', JSON.parse(retrievedObject));

答案 1 :(得分:4)

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

像这样存储:

s

并像这样使用:

localStorage.setItem('my_item', JSON.stringify(my_object));   

希望对您有所帮助:)

答案 2 :(得分:1)

本地存储只能处理字符串键/值对。如果要存储json对象,请使用.time { padding: 15px; display: inline-flex; box-shadow: 0px 0px 10px #3279e3; } .period { font-size: 10px; } .hour { ont-size: 10px; } ,而从本地存储中获取值时,请使用JSON.stringify()

要存储的对象示例:

JSON.parse()

存储方式:

var storeObject={name:"TestDate", time:"Date 2020-01-21T08:38:04.449Z"};

获取方式:

localStorage.setItem('storeObject', JSON.stringify(storeObject));

答案 3 :(得分:1)

没有 String 格式,您将无法存储某些内容。

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

这就是为什么您应该将数据转换为字符串的任何原因,无论它们是 Array 还是 Object

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

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

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

var getObj = JSON.parse(localStorage.getItem('item'));

答案 4 :(得分:0)

使用localDataStorage可以很容易地将对象存储在本地存储中,您可以在其中透明地设置/获取以下任何“类型”:Array,Boolean,Date,Float,Integer,Null,Object或String。 / p>

[免责声明]我是该实用程序的作者[/ DISCLAIMER]

示例:

localDataStorage.set( 'key1', 'Belgian' )
localDataStorage.set( 'key2', 1200.0047 )
localDataStorage.set( 'key3', true )
localDataStorage.set( 'key4', { 'RSK' : [1,'3',5,'7',9] } )
localDataStorage.set( 'key5', null )

localDataStorage.get( 'key1' )   -->   'Belgian'
localDataStorage.get( 'key2' )   -->   1200.0047
localDataStorage.get( 'key3' )   -->   true
localDataStorage.get( 'key4' )   -->   Object {RSK: Array(5)}
localDataStorage.get( 'key5' )   -->   null

如您所见,原始值得到尊重。现在,在您的情况下,我们会这样做:

>localDataStorage.set( 'testObject', { name : 'test', time : new Date( '2017-02-03T08:38:04.449Z' ) } )

请注意,您可以清楚地表达该对象。 (所有的字符串都是在后台完成的。)当我们检索密钥时,我们得到:

>localDataStorage.get( 'testObject' ) -->
>Object {name: "test", time: "2017-02-03T08:38:04.449Z"}