[英]Angular2 Observable, subscribe and map. Communication
我對Observables有問題。 我的基本溝通沒有問題,例如:SERVICE:
getTableRecords(): Observable<RecordModel[]> {
return this.http
.get( this.API + 'records' )
.map( (tableRecords: Response) => tableRecords.json().data as RecordModel[] )
.catch(this.handleError);
}
零件:
getTableRecords() {
this.recordService.getTableRecords()
.subscribe( tableRecords => { this.tableRecords = tableRecords; }, (err) => { this.error = err; console.log(this.error)})
}
最上面的示例效果很好,但是我又多了一步。 在顯示結果之前,我希望基於參數與兩個服務之間的通信來過濾一個值:
服務一:
getTableRecords(): Observable<RecordModel[]> {
return this.http
.get( this.API + 'records' )
.map( (res: Response) => res.json().data as RecordModel[] )
.catch(this.handleError);
}
服務二
getRecordDetail(assetId: string) {
return this.rootService.getTableRecords()
.map( (tableRecords:RecordModel[]) => {
console.log("GET RECORDS TO ANOTHER SERVICE: ", tableRecords, assetId);
(tableRecords:RecordModel[]) => tableRecords.filter( (tableRecord:RecordModel) => tableRecord.assetId === assetId )
})
}
零件:
tableRecord: RecordModel;
getRecordDetail() {
this.sub = this.activatedRoute.params.subscribe(
params => {
if (params[ 'assetId' ] != undefined) {
let assetId:string = params[ 'assetId' ]
this.complianceDetailService.getRecordDetail(assetId)
.subscribe( result => this.tableRecord = result )
} else console.log("UNDEFINED ASSETID");
}
);
}
在COMPONENT中,我在.subscribe( result => this.tableRecord = result )
中.subscribe( result => this.tableRecord = result )
問題IDE .subscribe( result => this.tableRecord = result )
,無法將void分配給RecordModel類型。
請說明我可以按以下順序進行:第一:從一個服務獲取數據,第二:在第二服務中處理數據,第三:將數據返回到組件。
我想使用Observables進行所有這些操作,因為我可以使用Promises進行相同的處理。
最好的問候烏蘭德!
getRecordDetail(assetId: string) {
return this.rootService.getTableRecords()
.map( (tableRecords:RecordModel[]) => {
console.log("GET RECORDS TO ANOTHER SERVICE: ", tableRecords, assetId);
return tableRecords.filter( (tableRecord:RecordModel) => tableRecord.assetId === assetId )
})
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.