Angular 4 http 响应没有功能

Angular 4 http response has no functions

我有一个 class 函数:

 export class Order {
    status: string;

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

当我创建一个新订单时,我可以调用函数:

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

但是如果从我的后端检索订单并调用该方法,我会得到一个错误,order.isNew is not a function

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

我做错了什么?

您的示例代码中没有任何逻辑可以让一些简单的 JSON 神奇地成为您的 Order 对象。你必须转换它。 'as' 运算符不会那样做,这只是 TypeScript 级别的类型转换。那里没有发生实际的转换。
如果您希望实现您的目标,请在采用 JSON 的 Order 上创建一个构造函数并调用 .map(response => new Order(response.json()))

您只是在将响应投射到 Order,而不是在创建 Order 的对象。这就是您收到该错误的原因。

让你的class像这样

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());