[英]Angular2 define json observable return type to interface or class model
[英]Observable and Angular2
我在Angular 2中遇到Observables问题
我的组件在Init上调用服务函数,如下所示:
delivery: IDeliveryCountry[];
ngOnInit() {
this.checkoutService._getInfo().subscribe(dev => this.delivery = dev);
}
这是IDeliveryCountry界面的外观:
export interface IDeliveryCountry {
iso: string;
name: string;
}
这是Service的样子:
_getInfo(): Observable<IDeliveryCountry[]> {
return this.http.get(this.deliveryCountryUrl)
.map((response: Response) => <IDeliveryCountry[]>response.json())
}
带有数据的json文件如下所示:
[
{
"iso":"se",
"name":"Sweden"
},
{
"iso":"dk",
"name":"Denmark"
}
]
我的html文件只是一个简单的ngFor循环:
<div *ngFor='let dev of delivery'>{{dev.iso}}</div>
到目前为止,所有事情都运行良好,正如预期的那样,我在UI中返回了“ se”和“ dk”。
当我将json文件中的数据结构更改为以下内容时,会出现问题:
{
"country": {
"iso":"se",
"name":"Sweden"
}
}
我希望数据只有一个具有iso和name属性的国家。 所以我的html文件如下所示:
<div>{{delivery.iso}}</div>
但是我一直都在将iso定义为undefined
“无法读取未定义的属性'iso'
谢谢!
您可以不用ngFor来执行此操作,因为它是一个对象
<div>{{delivery.country.iso}}</div>
发表评论后,未定义是因为数据即将异步,因此请使用elvis运算符避免这种情况:
{{delivery?.country?.iso}}
或者,您可以更改服务以返回DeliveryCountry []
getInfo(): Observable<IDeliveryCountry[]> {
return this.http.get(this.deliveryCountryUrl)
.map((response: Response) => response.json())
.map(delivery => delivery.country);
}
然后:
ngOnInit() {
this.checkoutService.getInfo()
.subscribe(deliveryCountries => this.deliveryCountries = deliveryCountries);
}
然后:
<div *ngFor="let deliveryCountry of deliveryCountries">{{deliveryCountry?.iso}}</div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.