Подписаться не определяется в угловых 2?

Я создаю демонстрационное приложение в Angular 2 и хочу утешить params['id'] в моем компоненте идентификатор исходит из параметров запроса.

Для достижения этого я делаю это в моем компоненте:

ngOnInit(): void {
     this.route.params
          .switchMap(
           (params: Params) => 
                this.heroService.getHero(+params['id']);
                console.log("ID :",params['id'])
           ).subscribe(hero => this.hero = hero);
    };

Но я получил эту ошибку:

core.umd.js:3491 EXCEPTION: Uncaught (in promise): Error: Error in :0:0 caused by: params is not defined
ReferenceError: params is not defined

Пожалуйста, предложите, что мне нужно сделать, чтобы утешить идентификатор параметра?

2 ответа

Решение

Тебе нужно иметь {} добавить больше операторов в функцию стрелки. Я думаю, что вы можете сделать:

    ngOnInit(): void {
         this.route.params
              .switchMap((params: Params) => {
  console.log("ID :",params['id']));
  return this.heroService.getHero(+params['id']);
  }) .subscribe(hero => this.hero = hero);
};

Зачем возвращаться?

Observable, которое возвращается switchmap, подписано в subscribe функция. В случае функций стрелок ()=>statment эквивалентно ()=>{return statement;}

Когда вы добавляете дополнительный оператор и используете скобки, вам нужно добавить пропущенный возврат.

Если вы хотите несколько операторов, вам нужен блок {}:

ngOnInit(): void {
  this.route.params
  .switchMap((params: Params) => {
    var hero = this.heroService.getHero(+params['id']);
    console.log("ID :",params['id']);
    return hero;
  })
  .subscribe(hero => this.hero = hero);
}

или же

ngOnInit(): void {
  this.route.params
  .switchMap((params: Params) => {
    console.log("ID :",params['id']);
    return this.heroService.getHero(+params['id']);
  })
  .subscribe(hero => this.hero = hero);
}
Другие вопросы по тегам