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());
我有一个 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());