Фильтрация из наблюдаемого на основе другого - PullRequest
0 голосов
/ 27 мая 2018

Я пытаюсь отобразить наблюдаемые, отфильтровывая их по событиям, генерируемым другими наблюдаемыми.Итак, вот мой вызов:

Как передать свойство события в фильтр?

Вот пример, с какими сущностями я хочу получить.В настоящее время это работает, потому что я жестко закодировал реляционные идентификаторы.Я хотел бы прочитать эти идентификаторы из наблюдаемых в комментариях.

export class AppComponent implements OnInit {
  currentInspection$;
  currentAircraft$;
  currentConfiguration$;

  ngOnInit() {
    const aircraft$ = Observable.of([
      { id: 1, callsign: 'D-AISY', configurationId: 100 },
      { id: 2, callsign: 'D-OOBE', configurationId: 200 },
      { id: 3, callsign: 'D-OOOO', configurationId: 100 }
    ]);
    const inspections$ = Observable.of([
      { id: 10, aircraftId: 3 },
      { id: 20, aircraftId: 2 }
    ]);
    const configurations$ = Observable.of([
      { id: 100, name: 'Default CRJ900 configuration' },
      { id: 200, name: 'Default B737 configuration' }
    ]);

    this.currentInspection$ = inspections$.pipe(
      map(inspections => inspections.find(inspection => inspection.id === 20))
    );

    // How do I get id property of this.currentInspection$ instead of 1 here?
    this.currentAircraft$ = aircraft$.pipe(
      map(aircraft => aircraft.filter(a => a.id === 1)) // I want the "1" to not be hardcoded
    );

    // How do I get configurationId property of this.currentAircraft$ instead of 100 here?
    this.currentConfiguration$ = configurations$.pipe(
      map(configurations => configurations.filter(c => c.id === 100)) // I want the 100 to not be hardcoded
    );
  }
}

А вот живой пример: https://stackblitz.com/edit/angular-streamception?file=src%2Fapp%2Fapp.component.ts

Я попытался использовать mergeMap для объединения первой наблюдаемой споследний и фильтр изнутри, но это похоже на работу против реактивного пути.

Если я подхожу к проблеме с неправильного угла, пожалуйста, направьте меня в правильном направлении.

1 Ответ

0 голосов
/ 28 мая 2018

Я не уверен, какое предполагаемое поведение вы хотите, но я кое-что понял из моего понимания вашей проблемы, надеюсь, это поможет вам узнать, в каком направлении вам нужно идти.

Проверьте stackblitz .

...