Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 我能以某种方式将类的函数指定给角度的对象吗?_Angular_Typescript_Class_Local Storage - Fatal编程技术网

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
正是我需要的!谢谢!