javascript - deklarera egenskaper i konstruktör angular 2
Jag är en Java-programmerare som precis har landat i Angular 2. När jag gjorde den officiella handledningen blev jag förvånad över att se att de deklarerar dessa egenskaper i konstruktorn istället för högst upp i klassen.
Jag vet att Java och JS är väldigt olika men finns det någon teknisk anledning till att göra på det här sättet
constructor(private router: Router ,private heroService: HeroService) {}
eller så här
private router: Router
private heroService: HeroService
constructor( ) {}
Svar #1
Medan detta:
private router: Router
private heroService: HeroService
deklarerar bara två privata egenskaper i din klass av typen Router och HeroService,
det här :
constructor(private router: Router, private heroService: HeroService) {}
injicerar en instans av Router (och HeroService), skapar dessutom två privata egenskaper och tilldelar de injicerade instanserna av dina tjänster till dessa i ett utsagestatement.
För en bättre förståelse gör detta samma sak:
private _router: Router;
private _heroService: HeroService;
constructor(router: Router, heroService: HeroService) {
this._router = router;
this._heroService = heroService;
}
Med "första tillvägagångssättet" har du inte en instans av dessa tjänster.
Sidnot: providers: [Router, HeroService] som du kanske har någonstans i en av dina Component Anntations ger bara dina komponenter möjligheten att injicera dem, men gör det faktiskt inte, det är därför du förmodligen alltid slutar med att injicera dem via din constructor-metod.
