2017-01-24 1 views
0

Observables에 문제가 있습니다. 나는 기본 통신 예컨대 : 서비스에 아무런 문제가 없다 :Angular2 관찰 가능, 구독 및지도. 통신

getTableRecords(): Observable<RecordModel[]> { 
     return this.http 
      .get(this.API + 'records') 
      .map((tableRecords: Response) => tableRecords.json().data as RecordModel[]) 
      .catch(this.handleError); 

    } 

COMPONENT : 위에

getTableRecords() { 
     this.recordService.getTableRecords() 
      .subscribe(tableRecords => { this.tableRecords = tableRecords; }, (err) => { this.error = err; console.log(this.error)}) 
    } 

예는 잘 작동하지만 하나 추가 단계에 문제가 있습니다.

서비스 I :

getTableRecords(): Observable<RecordModel[]> { 
     return this.http 
      .get(this.API + 'records') 
      .map((res: Response) => res.json().data as RecordModel[]) 
      .catch(this.handleError); 

    } 

서비스 II

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) 
      }) 
    } 

COMPONENT :

나는 결과를 표시합니다 전에, 나는 두 서비스 간의 통신에 parametr에 따라 하나 개의 값을 필터링 할 wannt
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"); 
      } 
     ); 
    } 

구성 요소에 문제가 있습니다. .subscribe(result => this.tableRecord = result)에 IDE가 있습니다. void는 n입니다. RecordModel을 입력 할 수 있도록 할당 할 수 있습니다.

내가이 순서를 만들 수 있습니다 설명해주십시오 : 첫째, 하나 개의 서비스, 두에서 데이터를 가져 오기 : 구성 요소에 데이터를 반환 : 두 번째 서비스 세 가지 데이터를 조작 할 수 있습니다.

나는 약속과 함께 할 수있는 순서대로 Observables로 만들고 싶다.

최고 감사합니다. 우간다!

답변

1
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) 
      }) 
    } 
+0

답변을 주셔서 감사합니다,하지만 불행히도 내가 그런 식으로, IDE에서 내가 잘못을 가지고 한 경우 : [TS] 형식 매개 변수 'T'에 대한 형식 인수는 사용에서 유추 할 수 없습니다. 형식 인수를 명시 적으로 지정하는 것을 고려하십시오. 형식 인수 후보 'RecordModel []'은 후보 'RecordModel'의 수퍼 유형이 아니기 때문에 유효한 형식 인수가 아닙니다. 'RecordModel'유형에 'length'속성이 없습니다. this : this –

+0

대답 최종 업데이트 – raj

관련 문제