Komponentkommunikasjon og Navigasjon
Du vil lære hvordan du setter opp navigasjon i Angular-appen din på riktig måte, samt hvordan du kan sende 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 oppgavens fulle data.
Vi sender ikke data direkte mellom komponentene. 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 rutesamhandlingen 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 rute-logikk. I stedet skal den bare varsle forelderen om at en navigasjonshandling er forespurt.
Denne tilnærmingen er enklere å teste og lese, holder rute-logikken sentralisert, og sikrer at TaskComponent forblir ryddig og fokusert på sine ansvarsområder.
Implementering av TaskComponent
Hovedoppgaven til TaskComponent er å sende 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, sender navigateToTask()-metoden ut 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 har ansvar for å navigere til detaljsiden for oppgaven.
For å gjøre dette bruker vi Angulars innebygde Router-tjeneste, som lar oss programmere endring av URL 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 gir oss tilgang til parameterne for den gjeldende ruten.
-
Vi bruker
snapshot.paramMap.get('id')for å hente ut verdien tilidfra URL-en; -
Deretter konverterer vi den til et tall og sender den til
getTaskById(id)fraTaskServicefor å hente oppgaven; -
Metoden
goToHomePage()navigerer tilbake til hovedsiden hvor hele oppgavelisten vises.
Ved å bruke Angular Router har vi dermed 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
Can you show me how to emit the event from TaskComponent?
How do I set up the Router in TaskListComponent?
How does TaskDetailsComponent retrieve the task ID from the URL?
Awesome!
Completion rate improved to 3.13
Komponentkommunikasjon og Navigasjon
Sveip for å vise menyen
Du vil lære hvordan du setter opp navigasjon i Angular-appen din på riktig måte, samt hvordan du kan sende 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 oppgavens fulle data.
Vi sender ikke data direkte mellom komponentene. 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 rutesamhandlingen 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 rute-logikk. I stedet skal den bare varsle forelderen om at en navigasjonshandling er forespurt.
Denne tilnærmingen er enklere å teste og lese, holder rute-logikken sentralisert, og sikrer at TaskComponent forblir ryddig og fokusert på sine ansvarsområder.
Implementering av TaskComponent
Hovedoppgaven til TaskComponent er å sende 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, sender navigateToTask()-metoden ut 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 har ansvar for å navigere til detaljsiden for oppgaven.
For å gjøre dette bruker vi Angulars innebygde Router-tjeneste, som lar oss programmere endring av URL 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 gir oss tilgang til parameterne for den gjeldende ruten.
-
Vi bruker
snapshot.paramMap.get('id')for å hente ut verdien tilidfra URL-en; -
Deretter konverterer vi den til et tall og sender den til
getTaskById(id)fraTaskServicefor å hente oppgaven; -
Metoden
goToHomePage()navigerer tilbake til hovedsiden hvor hele oppgavelisten vises.
Ved å bruke Angular Router har vi dermed 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!