繁体   English   中英

Angular 4 http响应没有功能

[英]Angular 4 http response has no functions

我有一个带有函数的类:

 export class Order {
    status: string;

    public isNew(): boolean {
        return status == 'NEW';
    }
 }

创建新订单时,可以调用以下函数:

let order = new Order();
order.isNew();

但是,如果从后端检索订单并调用该方法, order.isNew is not a function收到错误消息, order.isNew is not a function

this.http.get('url')
.map(response => response.json() as Order)
.subscribe(order => order.isNew());

我究竟做错了什么?

在示例代码中没有逻辑可以使一些简单的JSON神奇地成为您的Order对象。 您必须将其转换。 'as'运算符不执行此操作,这只是在TypeScript级别上强制类型转换。 那里没有实际的转换发生。
如果您希望实现目标,请在Order上创建一个采用JSON的构造函数,然后调用.map(response => new Order(response.json()))

您只是在对订单进行响应,而不是在创建订单对象。 这就是为什么您会收到该错误。

让你的班级像这样

export class Order {
    status: string;

    constructor(obj?: any) {
         this.status = obj && obj.status || '';
    }
    public isNew(): boolean {
        return status == 'NEW';
    }
 }


this.http.get('url')
.map(response => response.json())
.subscribe(order => {
    const new_order = new Order(order);
});

因为在数据库中存储的是数据,而不是函数。 这意味着您的函数没有保存,因此当您收到响应时,它就不在其中。

此外,您只投放订单响应,而不创建新订单。 这样做主要是为了在IDE中具有自动完成功能。

如果您希望它起作用,则需要创建一个构造函数:

export class Order {
    constructor(public status?: string) { this.status = status; }
    public isNew(): boolean { return status == 'NEW'; }
}}

然后,您需要根据您的响应创建一个对象:

this.http.get('url')
.map(response => new Order(response.json().status))
.subscribe(order => order.isNew());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM