簡體   English   中英

Angular2可觀察,訂閱和映射。 通訊

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM