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.

Relaterade artiklar