подписаться на маршрут, чтобы стать заметным и сделать что-то с ним в одной подписке - PullRequest
0 голосов
/ 28 июня 2018

У меня есть следующий код, который получает информацию от маршрута, инициализирует наблюдаемое и что-то делает с этим наблюдаемым:

export class ThemesEditComponent implements OnInit {

  themeId: string;
  theme$: Observable<Theme>;
  theme: Theme;

ngOnInit() {
    this.route.paramMap
      .subscribe(
        (param: any) => {
          this.themeId = param.get('themeId');

          this.theme$ = this.sectionStoreService.themes
            .pipe(
              map(themes => themes.find(item => item._id === this.themeId))
            );

          this.theme$
            .subscribe(
              theme => {
                this.theme = theme;
            });

          this.setFormValue(this.theme);
      });
  }

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

1 Ответ

0 голосов
/ 28 июня 2018

Вы можете использовать mergeMap. Я полагаю, this.setFormValue не работает правильно. Потому что он срабатывает до установки this.theme. Вы можете попробовать это:

this.route.paramMap.pipe(
  map(param => param.get('themeId')),
  mergeMap(themeId => this.sectionStoreService.themes.pipe(
    map(themes => themes.find(item => item._id === themeId))
  )).subscribe(theme => this.setFormValue(theme))
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...