Исследуйте активированные наблюдаемые значения с помощью операторов rxjs

У меня довольно простой запрос: я хотел бы исследовать наблюдаемые activRoute (как paramMap, так и queryParamMap) - я хотел бы установить переменные компонента в соответствии с их результатами. Попытка сделать это с использованием операторов rxjs pipe и flatMap, но не смогла привести к успеху. Смотрите мой код:

param1: number;
param2: string;


ngOnInit() {
  this.activatedRoute.paramMap.pipe(
    flatMap(params => {
      this.param1 = +params.get(<name Of Param>);
      return this.activatedRoute.queryParamMap;
    }),
    flatMap(queryParams => {
      this.param2= queryParams.get(<name of query param>);
    })
  ).subscribe(result => /*no need to do anything*/);

2 ответа

Решение

На самом деле вы должны использовать switchMap вместо mergeMap так как вам не нужен результат всего наблюдаемого в конце.

param1: number;
param2: string;

ngOnInit() {
  this.activatedRoute.paramMap.pipe(
    switchMap(params => {
      this.param1 = +params.get(<name Of Param>);
      return this.activatedRoute.queryParamMap;
    }),
    map(queryParams => {
      this.param2= queryParams.get(<name of query param>);
    })
  ).subscribe(result => /*no need to do anything*/);

Если вы всегда хотите последнее значение обоих, используйте объединениеЛатест.

combineLatest(
    this.activatedRoute.paramMap,
    this.activatedRoute.queryParamMap
).subscribe( ([paramMap, queryParamMap]) =>
    // do stuff here
);
Другие вопросы по тегам