Opprette din første vinkelapp Komponenter, Del 2

I den tredje opplæringen av serien lærte du hvordan du oppretter hjemmekomponenten til landinformasjonen din. Vi vil lage to deler i denne opplæringen. En av komponentene vil liste opp alle landene vi har lagret i LAND array. En annen komponent vil vise detaljene til hvilket land som er valgt av brukeren.

Opprette AllCountriesComponent

De HomeComponent som vi opprettet i den forrige opplæringen og i AllCountriesComponent som vi vil skape i denne delen, er svært like. Den eneste forskjellen er at i stedet for å sortere LAND array og skiver den for å bare få de tre første landene, vil vi liste dem alle samtidig. Gå inn i konsollen din i konsollen, og kjør følgende kommando:

ng generere komponent alle land

Dette vil opprette en mappe som heter alle land inne i src / app katalog av Angular app. Mappen vil ha tre forskjellige filer som heter alle-countries.component.ts, all-countries.component.html, og all-countries.component.css. Komponentlogikken som å få listen over land og initialisere komponenten selv vil gå inn i .ts fil. De .html filen lagrer malen for komponenten, og .css filen lagrer forskjellige CSS-regler for å utforme malen.

Her er koden for alle-countries.component.ts fil:

importer Komponent, OnInit fra '@ vinkel / kjerne'; importer Country fra '... / country'; importer CountryService fra '... /country.service'; @Component (selector: 'app-all-countries', templateUrl: './all-countries.component.html', styleUrls: ['./all-countries.component.css']) eksportklasse AllCountriesComponent implementerer OnInit land: land []; Konstruktør (privat landService: CountryService)  ngOnInit () this.getCountries ();  getCountries (): void this.countries = this.countryService.getCountries (); 

Som du kan se, er koden ganske enkel. Vi importerer Land og CountryService klasser som vi opprettet i den andre opplæringen av serien. Komponenten dekoratøren brukes til å spesifisere väljeren som vi skal bruke for å identifisere AllCountriesComponent.

Inne i klassedisplayet oppretter vi en land eiendom som aksepterer en rekke av Land gjenstander som sin verdi. De CountryService Klassen legges til komponenten ved hjelp av avhengighetsinjeksjon. Vi kaller getCountries () metode for denne klassen ved initialisering. De getCountries () Metoden selv er avhengig av getCountries () fra CountryService klassen, som returnerer en rekke av Land objekter.

De all-countries.component.html filen lagrer malen for komponenten vår.

Liste over alle landene i vår database

landsnavn

Hovedstad
(Country.capital)

Akkurat som malen for HomeComponent, vi bruker * ngFor å liste alle landene som er oppnådd av getCountries () metode og lagret i land eiendom av AllCountriesComponent klasse. Vi bruker denne komponenten til å vise hovedstader i ulike land ved hjelp av hovedstad eiendom. Du vil lære om routerLink Direktivet brukes med en tag i neste opplæring.

CSS brukt er det samme som for home.component.css fil. Den eneste forskjellen er at vi endrer bakgrunnsfargen for hvert lands blokk til grønt. Her er den komplette CSS-koden:

en tekst-dekorasjon: ingen;  *, *: etter, *: før boks størrelse: grense-boksen;  kropp font-family: 'lato';  h2, h3, h4, p font-family: 'lato'; margin: 10px;  .country-block p margin-top: 0; margin-bunn: 0;  .country-block h4 margin-bottom: 10px;  h4 posisjon: relativ; fontstørrelse: 1,25rem;  .container margin: 0 50px; tekst-align: center;  .country-enhet bredde: 200px; display: inline-block; margin: 10px;  br klar: begge;  .country-block polstring: 30px 0; tekst-align: center; farge: hvit; høyde: 150px; bakgrunnsfarge: # 4CAF50; border-radius: 2px;  .country-block: svever bakgrunnsfarge: # FF5722; markør: pointer; Farge: hvit;  

Opprette CountryDetailComponent

De CountryDetailComponent vil være den tredje og siste delen av vår Angular app. Når brukere klikker på navnet på et hvilket som helst land som er oppført i enten HomeComponent eller AllCountriesComponent, de vil bli tatt til CountryDetailComponent.

Gå tilbake til konsollen og kjør følgende kommando:

ng generere komponent land-detalj

Dette vil opprette en mappe som heter country-detalj inne i src / app katalog over appen din. Du bør se fire forskjellige filer i mappen. Tre av disse filene vil bli kalt: country-detail.component.ts, country-detail.component.html, og country-detail.component.css. Akkurat som de tidligere komponentene, country-detail.component.ts vil inneholde logikken til vår komponent, og country-detail.component.html vil inneholde malen for å gjengi den.

Her er koden for country-detail.component.ts fil:

importer Komponent, OnInit fra '@ vinkel / kjerne'; importer ActivatedRoute fra '@ vinkel / router'; importer Sted fra '@ vinkel / vanlig'; importer Country fra '... / country'; importer CountryService fra '... /country.service'; @Component (selector: 'app-country-detail', templateUrl: './country-detail.component.html', styleUrls: ['./country-detail.component.css']) eksportklasse CountryDetailComponent implementerer OnInit land: land; konstruktør (privat rute: ActivatedRoute, privat landService: CountryService, privat sted: Sted)  ​​ngOnInit (): void this.getCountry ();  getCountry (): void const name: string = this.route.snapshot.paramMap.get ('navn'); this.country = this.countryService.getCountry (navn);  goBack (): void this.location.back (); 

Denne gangen har vi også importert ActivatedRoute og Location, sammen med Komponent og OnInit. Vi bruker ActivatedRoute for å få tilgang til informasjon om en rute tilknyttet en komponent lastet i en stikkontakt. Vi bruker plassering for å gjøre det mulig for vår applikasjon å samhandle med nettleserens URL.

I klassedisisjonen oppretter vi en eiendom som heter land som aksepterer a Land objekt som sin verdi. I motsetning til HomeComponent og AllCountriesComponent, de CountryDetailComponent klassen må vise detaljer om bare ett land av gangen.

De getCountry () metoden trekker ut Navn parameter fra rutens øyeblikksbilde og bruker verdien til å finne et land med det oppgitte navnet inne i LAND array. De gå tilbake() Metode tar brukeren tilbake til forrige side ved hjelp av tilbake() metode fra plassering klasse.

Her er koden for country-detail.component.html fil:

country.name | stor bokstav

Hovedstad: Country.capital

Område: country.area | nummer km 2

Befolkning: country.population | Nummer

BNP: country.gdp | tall USD

Valuta: Country.currency

Malen koden inne i div med * NgIf = "land" gjengis bare hvis land har blitt satt til en verdi. Vi bruker vinklede rør for å kapitalisere navnet på landet og formatere land og befolkning på landene riktig. Vi er bindende klikkhendelse av vår Gå tilbake knappen til gå tilbake() metode for vår komponent slik at når brukere klikker på en knapp, blir de tatt tilbake til forrige side.

Her er CSS som vil gå inn i country-detail.component.css fil:

.container margin: 0 auto; bredde: 380px;  h2, p font-family: 'Lato';  p font-size: 1.25rem;  p span color: # 4CAF50; border-radius: 5px; bredde: 200px; display: inline-block;  etikett display: inline-block; bredde: 3em; margin: .5em 0; farge: # 607D8B; font-weight: bold; font-familie: 'Lato';  knappen margin-top: 20px; font-familie: Arial; bakgrunnsfarge: # F44336; grense: ingen; polstring: 5px 10px; border-radius: 20px; markør: pointer; oversikt: ingen; farge: hvit; font-familie: 'Lato';  

Siste tanker

Ved gjennomføringen av denne opplæringen har vi lagt til to deler til vår første Angular-app. De AllCountriesComponent var veldig lik den HomeComponent som de begge gjengitt en liste over land lagret i LAND array. De CountryDetailComponent var annerledes fordi det hentet informasjon om et enkelt land fra LAND array basert på navnet sitt. 

Etter å ha opprettet tre forskjellige komponenter, bør du nå ha en grunnleggende forståelse av samspillet mellom .ts, .html, og .css filer for å lage en fullt fungerende komponent.

I neste veiledning i serien lærer du hvordan du bruker alle disse komponentene sammen og gjør noen endringer slik at appen kan løpe uten feil.