Подписаться не определяется в угловых 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);
}