angular - 当从 LocalStorage 为对象赋值时如何在 typescript 对象中创建实例方法

标签 angular typescript

我是 Java 开发人员,但我正在尝试使用 typescript 。

这是我的用户对象:

export class User
{
    id: string;
    name: string;
    email?: string;
    unit: string;
    street: string;
    postalcode: string;
    paymentmode: string;

    public isComplete(): boolean
    {
        if(this.id != null && this.email != null && this.isAddress()){ return true}
        else return false;
    }

    public isAddress(): boolean
    {
        if(this.street != null && this.postalcode != null){ return true}
        else return false
    }


}

还有另一个 typescript ...

var user = new User();
user = this.loginService.getLocalUser();

我假设 localStorage 被解析为用户!

我无法以这种方式访问​​ isComplete 方法

user.isComplete()

相反,我需要将其用作静态对象

User.isComplete

我的 getLocaluser:

getLocalUser(): User {
        var user = new User();
        user = JSON.parse(localStorage.getItem('user'));

        return user;
    }

我怎样才能实现它?

Error

最佳答案

使用这个

let user = new User().deserialize(this.loginService.getLocalUser());

现在在您的 User 模型中添加一个 deserialize() 方法

deserialize(input: any): User {
    let self: any = this;
    for (let prop in input) {
            self[prop] = input[prop];
    }
    return self;
}

当您调用 Web 服务并使用 parse() 将其映射到您的 User 对象时,会发生什么?它的实例方法不会被创建,因为它们不驻留在您的response 对象 deserialize() 所做的是创建一个新的 User 对象副本,并从 response 中一个一个地复制值。

关于angular - 当从 LocalStorage 为对象赋值时如何在 typescript 对象中创建实例方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42508009/

相关文章:

javascript - Angular 我不使用 (load) 调用函数

angular - 如何仅在 Angular 5 中所有子项都已完全加载时才显示页面?

typescript - 使用 Firebase config.ts 文件设置 Vue 3 + Quasar 时,出现 eslint 错误 : Unsafe assignment of an `any` value

Typescript:函数中的可选参数,取决于联合类型是否具有属性

angular - 尝试从 Angular 应用程序连接到 asp.net core signalr hub 时出错

javascript - 用于更改 Angular 2 或更高版本中特定变量的动态脚本

angular - Angular 2 中的原生元素

inheritance - 在 typescript 中使用具有不同 namespace 的接口(interface)

reactjs - 类型 '{}' 缺少类型中的以下属性

angular - 如何在引导 Angular 2 应用程序时调用 rest api