Angular-HTTPGET在没有异步管道的情况下工作
我只需要得到一个项目,所以我在模板中使用ngIf而不是ngFor 模板:Angular-HTTPGET在没有异步管道的情况下工作,angular,asynchronous,observable,Angular,Asynchronous,Observable,我只需要得到一个项目,所以我在模板中使用ngIf而不是ngFor 模板: <div *ngIf="item | async"> Id {{ item.id }} Number {{ item.number }} </div> 但是,如果我删除异步管道,它就会工作。我可以看到项目id和编号。 为什么?我做错了什么 PS:我使用了Angular 4.1.3异步管道期望一个承诺或可观察。在本例中,您添加了一个普通的对象。这不是管道想要的,因此它会抛出一个错误。
<div *ngIf="item | async">
Id {{ item.id }}
Number {{ item.number }}
</div>
但是,如果我删除异步管道,它就会工作。我可以看到项目id和编号。
为什么?我做错了什么
PS:我使用了Angular 4.1.3异步
管道期望一个承诺
或可观察
。在本例中,您添加了一个普通的对象
。这不是管道想要的,因此它会抛出一个错误。这里不必使用异步管道
但是,您可以这样使用它:
export class DetailItemPage {
private item: Observable<Object>;
ngOnInit(){
this.getItem(6994);
}
getItem(id){
this.item = this.itemProvider.get(id);
}
}
导出类DetailItemPage{
私人项目:可观察;
恩戈尼尼特(){
本项目(6994);
}
getItem(id){
this.item=this.itemProvider.get(id);
}
}
在这种情况下,项
实际上是一个可观察的,,您的管道会非常高兴。只需知道,使用Observable
作为字段值的类型定义并不能保证在其中实际包含Observable
。因为http
调用返回一个any
,编译器仍然相信一切都是好的,即使它实际上不是好的。异步管道用于处理Promise
和可观察的
对象,项不是可观察的,但是当您在subscribe
回调中分配item
时,响应中包含的数据
如果你这样做,那就行了:
getItem(id){
this.item=this.itemProvider.get(id);
}
那么不使用异步管道就可以了?尽管是http呼叫?事实上,这没关系
InvalidPipeArgument: '[object Object]' for pipe 'AsyncPipe'
export class DetailItemPage {
private item: Observable<Object>;
ngOnInit(){
this.getItem(6994);
}
getItem(id){
this.item = this.itemProvider.get(id);
}
}
getItem(id){
this.item=this.itemProvider.get(id);
}