angular - Ruteparametere typekonvertering
Jeg går for øyeblikket gjennom Angular 2-opplæringen og lærer hvordan man bruker ruteren med parametere for å hente objektdatert ved hjelp av en id.
Nedenfor er koden som brukes i forbindelse med spørsmålet jeg vil stille.
Her er rute-definisjonen i app.module.ts for å dirigere til en komponent basert på en id
{
path:'detail/:id',
component:HeroDetailComponent
}
Servicemetode (fra Service-klassen) for å hente data basert på id
getHero(id: number): Promise<Hero> {
return this.getHeroes()
.then(heroes => heroes.find(hero => hero.id === id));
}
Og konstruktøren og OnInit-metoden (fra hero-details.component hvor dataene vil bli vist) brukes for å hente informasjonen fra URL-en
constructor(
private heroService: HeroService,
private route: ActivatedRoute,
private location: Location
){}
ngOnInit():void{
this.route.params
.switchMap((params:Params) => this.heroService.getHero(+params['id'])
.subscribe(hero => this.hero = hero));
}
Og til slutt et eksempel på dataene vi henter inn. id er av typen nummer og name av typen streng.
{ id: 11, name: 'Mr. Nice' }
SPØRSMÅL: Innenfor ngOnInit konverterer vi id fra en streng til et tall innenfor parameterne til this.heroService.getHero()-kallet. Hvordan fungerer egentlig +params['id'] med tanke på konvertering? Min gjetning var at det skyldes hvordan vi la opp ruten i app.module.ts-filen, og at detail/:id tilsvarer params['id'], men jeg ønsker en tydelig forklaring slik at jeg vet med sikkerhet hva jeg gjør i fremtiden. Takk
Svar #1
Params-objektet er en konstruksjon laget og fylt av Angular2-routeren for å holde parametrene du spesifiserer i rutene. Nøkkel-verdi-parene samsvarer med :id (nøkkel) og den faktiske ruteverdien under kjøring. Params kan holde mer enn én parameter.
Pluss (+params['id']) du refererer til er en standard JavaScript-operator som forteller tolken å konvertere param-resultatet fra hvilken som helst type det er (streng) til et tall.
Se denne referansen: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Unary_plus_(.2B)
Den unære plus-operatoren plasseres foran sin operand og evaluerer til dens operand, men forsøker å konvertere den til et tall hvis den ikke allerede er det.
+3 // 3
+"3" // 3
+true // 1
