Как подписаться на наблюдаемую, которая подписывается на другую наблюдаемую и сталкивается со следующей в Angular? - PullRequest
0 голосов
/ 05 июня 2018

Я создаю сервис, который требует информацию о части текущего пути.Итак, в моем компоненте я должен взглянуть на маршрут и , поскольку он завершен Мне нужно подписаться на фактический сервисный вызов, как показано ниже.

ngOnInit() {
  this.activeRoute.paramMap
    .subscribe(next => this.itemService.getItem(next.get("id"))
      .subscribe(next => this.item = next));
}

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

Это кажется , чтобы работать как есть, но покупка Enron также казалась как хорошая идеяЧто меня беспокоит, так это две вещи.Во-первых, такое предупреждение может быть (но не обязательно) признаком плохого дизайна, который имеет место только из-за совпадения.Во-вторых, рано или поздно мне может понадобиться получить доступ к обоим значениям next для какого-то требования и что мне тогда делать?

  1. Является ли приведенная выше рекомендация для такого вызова?
  2. Как получить доступ к внешнему следующему во внутреннем контексте?

1 Ответ

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

Моя идея

this.activatedRoute.paramMap.pipe(switchMap((param: ParamMap) => {
      //Not return params
      let id: number = param.has('id') ? parseInt(param.get('id')) : 0;
      //return this.itemService.getItem(id)
      return this.itemService.getItem(id)
    }))
    .subscribe((item:any)=>{
      this.item=item
    })

Обратите внимание, что есть подписка на Uniq

ПРИМЕЧАНИЕ: Если не работает, ваша идея в порядке (иногда у меня возникают проблемы с paramMap и switchMap)

...