javascript - Lưu trữ đối tượng trong localStorage
Tôi có một mảng như thế này:
[{name:"test", time:"Date 2017-02-03T08:38:04.449Z"}]
Tôi đã lưu nó trong localstorage và khi tôi lấy dữ liệu từ localstorage tôi nhận được giá trị:
[object, object]
Làm thế nào tôi có thể giải quyết vấn đề này?
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;
}
}
Câu trả lời #1
bộ nhớ cục bộ chỉ giới hạn để xử lý các cặp khóa/giá trị dạng chuỗi, bạn có thể làm như dưới đây bằng cách sử dụng JSON.stringify và khi lấy giá trị JSON.parse
var testObject ={name:"test", time:"Date 2017-02-03T08:38:04.449Z"};
Đặt vật vào kho:
localStorage.setItem('testObject', JSON.stringify(testObject));
Lấy đối tượng từ kho lưu trữ:
var retrievedObject = localStorage.getItem('testObject');
console.log('retrievedObject: ', JSON.parse(retrievedObject));
Câu trả lời #2
Đã hơi muộn để trả lời, nhưng tôi vẫn muốn trả lời để người xem trong tương lai có thể sử dụng, JavaScript sử dụng đối tượng theo tham chiếu, nên khi chúng ta lưu một đối tượng vào localStorage, thực chất chúng ta đang lưu địa chỉ của đối tượng, chứ không phải nội dung của đối tượng! Vậy nên nếu chúng ta muốn lưu nội dung của đối tượng (chắc chắn là chúng ta muốn), chúng ta nên làm như dưới đây:
lưu trữ như thế này:
localStorage.setItem('my_item', JSON.stringify(my_object));
và sử dụng như sau:
var my_object = JSON.parse(localStorage.getItem('my_item'));
hy vọng sẽ hữu ích :)
Câu trả lời #3
Bạn không thể lưu trữ một thứ gì đó mà không có Định dạng Chuỗi.
LocalStorage luôn lưu trữ khóa và giá trị dưới dạng chuỗi.
Đó là lý do tại sao bạn nên chuyển dữ liệu của mình sang chuỗi, bất kể đó là Mảng hay Đối tượng.
Để lưu trữ dữ liệu trong localStorage trước hết hãy chuyển nó thành chuỗi bằng cách sử dụng phương thức JSON.stringify().
var myObj = [{name:"test", time:"Date 2017-02-03T08:38:04.449Z"}];
localStorage.setItem('item', JSON.stringify(myObj));
Sau đó khi bạn muốn truy xuất dữ liệu, bạn cần phân tích Chuỗi thành Đối tượng một lần nữa.
var getObj = JSON.parse(localStorage.getItem('item'));
