我正在从HTML5本地存储中获取一些JSON对象,并将其分配给对象。
this.currentWebUser = Object.assign({}, JSON.parse(localStorage.getItem("currentUser")));
currentWebUser
是类WebUser
export class WebUser {
private _id: number;
private _connectionID: number;
public set id(value: number) {
this._id = value;
}
public get id(): number {
return this._id;
}
public set connectionID(value: number) {
this._connectionID = value;
}
public get connectionID(): number {
return this._connectionID;
}
}
当我尝试使用id
来获取this.currentWebUser.id
的值时(在打字稿中,这是id的引用getter方法),我得到的是不确定值,而不是实际值。
但是在chrome控制台中,我可以看到实际值。
需要帮助,在此先感谢!!!
答案 0 :(得分:2)
问题在于
返回的值Object.assign({}, JSON.parse(localStorage.getItem("currentUser")));
不是您的WebUser
类的实例。
这是一个具有Json中存在的字段的对象(在调试器屏幕快照中清晰可见)。
您可以检查currentWebUser.__proto__.constructor
使其指向Object()
,而不是WebUser()
您可以将Object.assign
的结果分配给currentWebUser
变量,因为Object.assign
的返回类型为any
。
您需要确保反序列化类的实例。 有几种方法,请参见以下链接
let webUser = Object.assign({}, JSON.parse('{"_connectionID": 1, "_id":2}'));
let webUser2 = Object.assign(
new WebUser(),
JSON.parse('{"_connectionID": 1, "_id":2}')
);
console.log(webUser);
console.log(webUser2);
输出:
{_connectionID: 1, _id: 2} // Your code
WebUser {_connectionID: 1, _id: 2} // What you expect
答案 1 :(得分:0)
在ts中定义类型为any的变量/field.property currentWebUser,并在构造函数本身中分配本地存储值。 例如:
public currenWebUser:any = {};
此外,您可以通过运行简单命令从本地存储获取json。 例如:
this.currentWebUser = JSON.parse(localStorage.getItem('currentUser'));