Angular 我能以某种方式将类的函数指定给角度的对象吗?
我有课堂秩序Angular 我能以某种方式将类的函数指定给角度的对象吗?,angular,typescript,class,local-storage,Angular,Typescript,Class,Local Storage,我有课堂秩序 export class Order { constructor(public sName: string, public sSurname: string){} getFullName(){ return this.sName + ' ' + this.sSurname; } } 问题是,当我将类型为Order的对象存储在localstorage中,然后尝试检索该对象时,刷新页面时,对象类型为Order的信息丢失,这就是为什么我无法
export class Order {
constructor(public sName: string, public sSurname: string){}
getFullName(){
return this.sName + ' ' + this.sSurname;
}
}
问题是,当我将类型为Order
的对象存储在localstorage中,然后尝试检索该对象时,刷新页面时,对象类型为Order
的信息丢失,这就是为什么我无法调用函数getFullName()
,尽管信息相同。实际上,类要大得多,我不想在检索对象时使用neworder()
创建一个新实例。我编写了一个函数adapt(order:any):order
,但在这种情况下,我希望数据来自数据库,其中属性具有不同的名称(例如Name
,而不是sName
。我可以编写一个函数adapt2(order):为我试图避免的具有不同属性名称的对象排序
。您建议我怎么做
ngOnInit(){
this.order = this.localstorage.retrieve('order') // order.getFullName() is not known
// should I write a new adapt function or would you recommend me to do something else?
}
这是预期的行为,因为JavaScript中没有序列化/反序列化类的标准方法。要解决此问题,您可以使用包正确序列化类。或者您可以执行以下简单操作:
const order = this.localStorage.retreive('order');
Object.setPrototypeOf(order, Order.prototype);
但是请记住,如果您的类有任何属性也是类,那么您需要递归地对它们执行相同的操作。这就是为什么有时使用像
typeson这样的包更容易存储对象的原因。请展示一些code@RachidO嘿,我使用NGXWebStorage,所以我使用函数store
:this。localstorage.store('order',order)
。我知道信息在刷新时丢失(已经问过这个问题):我想知道如何告诉应用程序我试图检索的对象是order
类型。我可以使用新订单(order.sName…)
但实际上,对象太大,我不想使用它。这就是为什么我要求使用其他方法。这是意料之中的。没有存储“类实例”的选项在任何js存储中。如果你真的需要它,你必须自己实现序列化和反序列化逻辑对象。setPrototypeOf
正是我需要的!谢谢!