【发布时间】:2019-05-30 17:51:55
【问题描述】:
我有两个组件details 和details-view。
在 details 中,我必须将 @Input() 的 obserwable 传递给第二个组件。
详细信息组件
res$: (id: number, type: string) => Observable<DetailsResponse[]>;
constructor(private service: Service) {
this.res$ = service.getData;
}
服务
getData(id: number, type: string): Observable<DetailsResponse[]>{
const params = new HttpParams().append('typename', type);
return this.http.get<any>('api/id', {params: params});
}
Details-查看 HTML
<dwtalis-view [resources$]="res$"></dwtalis-view>
Detalis-Viev TS 组件
@Input()
resouces$: Observable<DetailsResponse[]>
我的问题是如何在 detalis 视图组件中从 resources$ observable 订阅和获取数据。订阅此对象返回错误“resources$ is not a finction can not subscribe”
【问题讨论】:
-
假设这不是一个错字:
this.res$ = service.getData只是传递函数定义。如果你真的想要一个 observable,你需要执行函数this.res$ = service.getData()。或者,如果您确实打算传递函数定义,那么您对 resource$的输入是错误的,它应该是(id: number, type: string) => Observable<DetailsResponse[]>以匹配父组件中的res$ -
就像 vlad 说的那样,您传递的是函数而不是可观察的。在您的情况下,您需要调用该 resources$() 函数以从中获取可观察值。资源$().订阅。
标签: angular observable