Komponentkommunikasjon og navigasjon
Du vil lære hvordan du setter opp navigasjon riktig i Angular-appen din, og hvordan du overfører data mellom komponenter ved å bruke URL-en.
Vi har allerede to ruter konfigurert:
-
/
— viser listen over alle oppgaver; -
/task/:id
— viser detaljer for en spesifikk oppgave basert på dens ID.
Målet vårt nå er å sørge for at når brukeren klikker på en knapp inne i et oppgavekort, navigerer appen til en detaljside. TaskDetailsComponent
vil deretter hente oppgavens ID fra URL-en og bruke den til å hente fullstendige data om oppgaven.
Vi overfører ikke data direkte mellom komponenter. I stedet benytter vi Angular Router — vi sender oppgave-ID-en gjennom URL-en, og komponenten bruker denne ID-en til å hente oppgaven fra en tjeneste.
Hvordan komponenter samhandler
La oss definere hvordan denne rutingsinteraksjonen vil fungere.
Vi legger til en knapp inne i TaskComponent
. Når den klikkes, vil komponenten sende ut en hendelse til forelderen (TaskListComponent
). Forelderen håndterer selve navigasjonen ved å oppdatere URL-en, noe som får Angular til å laste TaskDetailsComponent
for den valgte oppgaven.
Hvorfor ikke rute direkte fra TaskComponent?
Hvis vi noen gang ønsker å gjenbruke TaskComponent
et annet sted (for eksempel i et modalvindu eller en annen liste), vil vi ikke at den skal være bundet til rutingslogikk. I stedet bør den bare varsle forelderen om at en navigasjonshandling er forespurt.
Denne tilnærmingen er enklere å teste og lese, holder rutingslogikken sentralisert, og sikrer at TaskComponent
forblir ryddig og fokusert på sine ansvarsområder.
Implementering av TaskComponent
Hovedoppgaven til TaskComponent
er å sende ut hendelser til forelderen. Vi legger til en knapp i malen som kaller navigateToTask()
, som vil sende ut hendelsen.
task-component.ts
task-component.html
task-component.css
Når brukeren klikker på info-knappen, emitterer navigateToTask()
-metoden oppgave-ID-en. Denne hendelsen fanges opp av forelderen (TaskListComponent
), som deretter håndterer navigasjonen ved hjelp av Angulars router.
Implementering av TaskListComponent
Denne komponenten er ansvarlig for å navigere til detaljsiden for oppgaven.
For å gjøre dette bruker vi Angulars innebygde Router
-tjeneste, som lar oss programmere endre URL-en og laste inn riktig komponent basert på ruten.
task-list-component.ts
task-list-component.html
Vi la til Router
-tjenesten i konstruktøren. Angular leverer denne tjenesten automatisk når komponenten opprettes, så ingen ekstra oppsett er nødvendig.
Vi satte også opp en hendelseslytter for (onNavigate
), som utløser metoden navigateToTask()
.
Når metoden kalles (for eksempel når brukeren klikker på info-knappen), bygger den ruten /task/3
, og routeren oppdaterer URL-en og laster inn TaskDetailsComponent
.
Hente en oppgave etter ID i TaskDetailsComponent
Når brukeren navigerer til ruten /task/:id
, laster Angular inn TaskDetailsComponent
. Denne komponenten har ansvar for:
-
Hente ID-en fra URL-en;
-
Finne den tilhørende oppgaven ved hjelp av ID-en;
-
Vise oppgavedetaljene på skjermen.
Slik fungerer det:
task-details-component.ts
task-details-component.html
task-details-component.css
Forklaring:
ActivatedRoute
-tjenesten lar oss få tilgang til parameterne for den gjeldende ruten.
-
Vi bruker
snapshot.paramMap.get('id')
for å hente utid
-verdien fra URL-en; -
Deretter konverterer vi den til et tall og sender den til
getTaskById(id)
fraTaskService
for å hente oppgaven; -
Metoden
goToHomePage()
navigerer tilbake til hovedsiden hvor hele oppgavelisten vises.
Ved å bruke Angular Router har vi altså satt opp navigasjon mellom komponenter og overført data ved hjelp av en URL-parameter. TaskListComponent
håndterer navigasjonen etter oppgave-ID, og TaskDetailsComponent
leser ID-en fra ruten og laster inn den tilhørende oppgaven.
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
Awesome!
Completion rate improved to 3.13
Komponentkommunikasjon og navigasjon
Sveip for å vise menyen
Du vil lære hvordan du setter opp navigasjon riktig i Angular-appen din, og hvordan du overfører data mellom komponenter ved å bruke URL-en.
Vi har allerede to ruter konfigurert:
-
/
— viser listen over alle oppgaver; -
/task/:id
— viser detaljer for en spesifikk oppgave basert på dens ID.
Målet vårt nå er å sørge for at når brukeren klikker på en knapp inne i et oppgavekort, navigerer appen til en detaljside. TaskDetailsComponent
vil deretter hente oppgavens ID fra URL-en og bruke den til å hente fullstendige data om oppgaven.
Vi overfører ikke data direkte mellom komponenter. I stedet benytter vi Angular Router — vi sender oppgave-ID-en gjennom URL-en, og komponenten bruker denne ID-en til å hente oppgaven fra en tjeneste.
Hvordan komponenter samhandler
La oss definere hvordan denne rutingsinteraksjonen vil fungere.
Vi legger til en knapp inne i TaskComponent
. Når den klikkes, vil komponenten sende ut en hendelse til forelderen (TaskListComponent
). Forelderen håndterer selve navigasjonen ved å oppdatere URL-en, noe som får Angular til å laste TaskDetailsComponent
for den valgte oppgaven.
Hvorfor ikke rute direkte fra TaskComponent?
Hvis vi noen gang ønsker å gjenbruke TaskComponent
et annet sted (for eksempel i et modalvindu eller en annen liste), vil vi ikke at den skal være bundet til rutingslogikk. I stedet bør den bare varsle forelderen om at en navigasjonshandling er forespurt.
Denne tilnærmingen er enklere å teste og lese, holder rutingslogikken sentralisert, og sikrer at TaskComponent
forblir ryddig og fokusert på sine ansvarsområder.
Implementering av TaskComponent
Hovedoppgaven til TaskComponent
er å sende ut hendelser til forelderen. Vi legger til en knapp i malen som kaller navigateToTask()
, som vil sende ut hendelsen.
task-component.ts
task-component.html
task-component.css
Når brukeren klikker på info-knappen, emitterer navigateToTask()
-metoden oppgave-ID-en. Denne hendelsen fanges opp av forelderen (TaskListComponent
), som deretter håndterer navigasjonen ved hjelp av Angulars router.
Implementering av TaskListComponent
Denne komponenten er ansvarlig for å navigere til detaljsiden for oppgaven.
For å gjøre dette bruker vi Angulars innebygde Router
-tjeneste, som lar oss programmere endre URL-en og laste inn riktig komponent basert på ruten.
task-list-component.ts
task-list-component.html
Vi la til Router
-tjenesten i konstruktøren. Angular leverer denne tjenesten automatisk når komponenten opprettes, så ingen ekstra oppsett er nødvendig.
Vi satte også opp en hendelseslytter for (onNavigate
), som utløser metoden navigateToTask()
.
Når metoden kalles (for eksempel når brukeren klikker på info-knappen), bygger den ruten /task/3
, og routeren oppdaterer URL-en og laster inn TaskDetailsComponent
.
Hente en oppgave etter ID i TaskDetailsComponent
Når brukeren navigerer til ruten /task/:id
, laster Angular inn TaskDetailsComponent
. Denne komponenten har ansvar for:
-
Hente ID-en fra URL-en;
-
Finne den tilhørende oppgaven ved hjelp av ID-en;
-
Vise oppgavedetaljene på skjermen.
Slik fungerer det:
task-details-component.ts
task-details-component.html
task-details-component.css
Forklaring:
ActivatedRoute
-tjenesten lar oss få tilgang til parameterne for den gjeldende ruten.
-
Vi bruker
snapshot.paramMap.get('id')
for å hente utid
-verdien fra URL-en; -
Deretter konverterer vi den til et tall og sender den til
getTaskById(id)
fraTaskService
for å hente oppgaven; -
Metoden
goToHomePage()
navigerer tilbake til hovedsiden hvor hele oppgavelisten vises.
Ved å bruke Angular Router har vi altså satt opp navigasjon mellom komponenter og overført data ved hjelp av en URL-parameter. TaskListComponent
håndterer navigasjonen etter oppgave-ID, og TaskDetailsComponent
leser ID-en fra ruten og laster inn den tilhørende oppgaven.
Takk for tilbakemeldingene dine!