Угловые провайдеры

Следуя руководству по angular 2 @ https://angular.io/docs/ts/latest/tutorial/toh-pt4.html

в

@Component({
})

Я вставил "providers: [HeroService]", который содержит метод getHeroes().

Создал конструктор:

constructor(private heroService: HeroService) {}

Теперь я не понимаю, как я могу использовать

this.heroService.getHeroes()

Единственные свойства, определенные в этом классе:

title = 'Tour of Heroes';
heroes: Hero[];
selectedHero: Hero;

Создают ли поставщики в декораторе @Component автоматически свойство для доступа к нему через this.?

Приложение работает, просто не знаю, как мы волшебным образом смогли получить доступ к heroService через this.


person Anthony Davis    schedule 08.11.2016    source источник


Ответы (1)


private (также может быть public) в

constructor(private heroService: HeroService) {}

также создает свойство heroService и присваивает значение, переданное конструктору. Это функция TypeScript и не зависит от Angular2 или DI.

person Günter Zöchbauer    schedule 08.11.2016
comment
Интересно, поэтому, если я оставлю это поле пустым, оно по умолчанию будет общедоступным, но не создаст свойство, но тот факт, что вы объявите его как приватное или общедоступное, скажет классу создать свойство. Хорошо знать. Я не могу понять, почему этот синтаксис должен иметь какое-либо отношение к созданию свойства. Это потому, что, определяя его как частный или общедоступный, вы подразумеваете, что он будет использоваться повторно? Извините, если этот вопрос не имеет смысла, я довольно новичок. Но в любом случае, спасибо за ответ. Очень полезно знать ;) - person Anthony Davis; 09.11.2016
comment
Очень часто свойствам свойств присваивают параметры конструктора, поэтому они создали этот синтаксический шугар. Если вы опустите private и public, свойство не будет создано, а heroService будет существовать только внутри конструктора. - person Günter Zöchbauer; 09.11.2016