2017-01-24 3 views
0

У меня проблема с Observables. У меня нет никаких проблем с базовой связи т.д .: SERVICE:Angular2 Наблюдается, подписаться и карта. Связь

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

Пример сверху работает хорошо, но у меня есть проблема с одним дополнительным шагом. Прежде, чем я буду показывать результат, я wannt отфильтровать одно значение на основе Parametr с связи между двумя службами:

СЕРВИС I:

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

    } 

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

КОМПОНЕНТ:

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 is n от назначаемого типа RecordModel.

Пожалуйста, объясните, что я могу сделать эту последовательность: Первые: Получить данные из одной службы, Два: Манипулирование данных во второй службе, Три: возвращаемых данных для компонента.

Все это я хочу сделать с Observables, потому что та же последовательность, которую я могу сделать с обещаниями.

С наилучшими пожеланиями Uland!

ответ

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 я ERR: [ц] Типа аргумент для параметра типа «Т» не может быть выведено из эксплуатации. Рассмотрим явно аргументы типа. Тип аргумент кандидат 'RecordModel []' не является допустимым аргументом типа, потому что он не является супертипом кандидата 'RecordModel'. Отсутствует свойство 'length' в типе 'RecordModel'. : –

+0

обновил ответ – raj

Смежные вопросы