Angular 4 http响应没有任何功能

时间:2017-11-09 08:41:17

标签: angular typescript angular-http

我有一个带有函数的类:

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

我做错了什么?

3 个答案:

答案 0 :(得分:2)

您的示例代码中没有逻辑,一些简单的JSON神奇地成为您的Order对象。你必须转换它。 ' as'运算符不会这样做,这只是TypeScript级别的类型转换。那里没有实际转换。
如果您希望实现目标,请在Order上创建一个构造函数,该构造函数接受JSON并调用compile 'com.android.support:multidex:1.0.2' compile 'com.android.support:appcompat-v7:25.3.1' compile 'com.android.support:design:25.4.0' compile 'com.android.support.constraint:constraint-layout:1.0.2' compile 'com.android.support:support-v4:25.3.1' compile 'com.android.support:recyclerview-v7:25.3.1' compile 'com.android.support:customtabs:25.4.0' compile 'com.android.support:cardview-v7:25.4.0'

答案 1 :(得分:2)

您只是将您的回复转换为订​​单,而不是创建订单的对象。这就是你得到这个错误的原因。

让你的班级成为这样的

python get-pip.py

答案 2 :(得分:1)

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

此外,您只是将响应转换为订单,而不是创建新订单。这样做主要是为了在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());