Я изучаю Angular2, следуя руководству «Tour of Heroes» на Angular.io. В конце учебника мы настраиваем маршрутизацию на детальную страницу и передаем параметр, указывающий, что герой вытесняется. Это обрабатывается с использованием параметров Observable в ActivatedRoute. Мы используем switchMap для перенаправления из параметров Observable to Promise, чтобы вернуть нужные нам данные на основе параметра.Использование switchMap с обещаниями
Синтаксис, используемый в учебнике, является кратким, поэтому я попытался разбить его на строительные блоки, чтобы лучше понять, что происходит. В частности, я попытался заменить стрелкой вправо с фактической функцией, которая, как я думаю, идентична. Но моя модификация не работает.
Вот код:
ngOnInit(): void {
this.route.params
.switchMap((params: Params) => this.heroService.getHero(+params['id']))
//.switchMap(this.getHero)
.subscribe(hero => this.hero = hero);
}
getHero(params: Params) : Promise<Hero> {
return this.heroService.getHero(+params['id']);
}
Что меня смущает, почему с помощью линии, которая в настоящее время закомментирована вместо линии над ней, я получаю сообщение об ошибке: "Cannot read property 'getHero' of undefined."
Две версии кода выглядят идентично меня.
Один будет метод, другая функция стрелка с границей 'this'. Вы уверены, что ошибка в '.getHero', а не' .heroService' внутри функции? – Bergi
Возможный дубликат [Как получить доступ к правильному \ 'this \' внутри обратного вызова?] (Https://stackoverflow.com/questions/20279484/how-to-access-the-correct-this-inside-a-callback) – echonax