2016-07-05 3 views
2

Я программист Java, который только что приземлился в угловом 2. Когда я делал официальный учебник, я был удивлен, увидев, что они объявляют эти свойства в конструкторе вместо вершины класса.объявлять свойства в конструкторе угловые 2

Я знаю, что Java и JS очень разные, но есть какие-либо технические причины между делать как этот

constructor(private router: Router ,private heroService: HeroService) {} 

или как это

private router: Router 
private heroService: HeroService 

constructor() {} 

ответ

6

В то время как это:

private router: Router 
private heroService: HeroService 

просто объявляет две частные свойства вашего класса типа Router и HeroService,

это:

constructor(private router: Router, private heroService: HeroService) {} 

впрыскивает экземпляр RouterHeroService), кроме того, создает две частные свойства и присваивает инъекционные экземпляры ваших услуг этим в одном заявлении.

Для лучшего понимания, это делает то же самое:

private _router: Router; 
private _heroService: HeroService; 

constructor(router: Router, heroService: HeroService) { 
    this._router = router; 
    this._heroService = heroService; 
} 

С «первого подхода» вы не имеете экземпляр этих услуг.

Sidenote: providers: [Router, HeroService], которые вы могли бы иметь где-то в одном из ваших Component Anntations просто дать ваши компоненты возможность впрыснуть их, но на самом деле не делать, поэтому вы, вероятно, в конечном итоге инъекционных их всегда с помощью вашего метода constructor.

Смежные вопросы