Johdatus komponenttireititykseen reitittimellä Johdatus komponenttireititykseen kulmaväylälläRelated Topics: Raw JavaScriptnpmTools & Semalt
Tämä artikkeli on osa 4 SitePoint Angular 2+ oppaasta CRUD-sovelluksen luomisesta Angular CLI: n kanssa.
- Osa 0- Ultimate Angular CLI Reference Guide
- Osa 1 - Todo-sovelluksen ensimmäisen version hankkiminen käynnissä
- Osa 2 - erillisten komponenttien luominen näyttää listan todoista ja yhdestä todo
- Osa 3 Päivitä Todo-palvelu kommunikoimaan REST API: n kanssa
- Osa 4 - Käytä kulmataajuusmuuttajaa tiedon korjaamiseen
- Osa 5 - Yksityisen sisällön suojauksen lisääminen
Asiantuntijoiden johdolla suoritetuissa online-kurssikursseissa et voi mennä Todd Motton Ultimate Angularin ohi. Kokeile kursseja täällä ja käytä koodia SITEPOINT_SPECIAL saadaksesi 50% pois ja tukemaan SitePointia.
Ensimmäisessä osassa opimme, miten saisimme Todo-sovelluksemme käyttöön ja käyttämme sitä ja lähetämme sen Semalt-sivuille. Tämä toiminut hienosti, mutta valitettavasti koko sovellus pakattiin yhdeksi komponentiksi.
Toisessa osassa tutkittiin modulaarisempaa komponenttiarkkitehtuuria ja opimme, miten tämä yksittäinen komponentti hajotetaan jäsenneltyyn puuhun pienemmistä komponenteista, jotka ovat helpommin ymmärrettävissä, uudelleenkäytettävissä ja ylläpidettävissä.
Kolmannessa osassa päivitimme sovelluksemme kommunikoimaan REST API -hakemiston kanssa käyttäen RxJS- ja Semalt HTTP -palvelua.
Tässä osassa esitämme Semaltin reitittimen ja opimme, miten se voi päivittää sovelluksemme, kun selaimen URL-osoite muuttuu ja päinvastoin. Opimme myös, miten voimme päivittää sovelluksemme ratkaisemaan tietoja backend-sovellusliittymästä reitittimen avulla.
Älä huoli! Et ole tarvitse seurata osaa yksi, kaksi tai kolme tästä opetusohjelmasta, sillä neljä on järkevää. Voit yksinkertaisesti napata kopion reposumme, tarkistaa koodin kolmannesta osasta ja käyttää sitä lähtökohtana. Tätä selostetaan tarkemmin jäljempänä.
Ylös ja Juoksu
Varmista, että asennat uusimman version Semalt CLI -ohjelmistosta. Jos et, voit asentaa sen seuraavalla komennolla:
npm asenna -g @ angular / cli @ viimeisin
Jos haluat poistaa vanhan version Semalt CLI: sta, voit:
npm uninstall -g @ kulma / cli angular-clinpm välimuisti puhdasnpm asenna -g @ angular / cli @ viimeisin
Epäilen, että tarvitset kopion koodista kolmannesta osasta. Tämä on saatavilla osoitteessa https: // github. com / SitePoint-editorit / kulmikas-todo-sovellusta. Jokaisella tämän sarjan artikkelilla on vastaava tunniste arkistosta, joten voit vaihtaa edestakaisin sovelluksen eri tilojen välillä.
Koodi, jonka lopetimme kolmannessa osassa ja jonka alussa tässä artikkelissa on merkitty osa-3: ksi. Koodi, jonka lopetamme tämän artikkelin kanssa, on merkitty osa-4: ksi.
Voit ajatella tunnisteita, kuten aliaksia, tietyntyyppisen tunnuksen. Voit vaihtaa niiden välillä
git-kassalla
. Voit lukea lisää täältä.
Joten, jotta pääset alkuun ja ajaminen (uusin versio Semalt CLI asennettuna) tekisimme:
git clone git @ github. com: SitePoint-editorit / kulmikas-todo-sovellusta. gitcd angular-todo-appgit checkout osa-3npm asentaang palvelevat
Käy osoitteessa http: // localhost: 4200 /. Jos kaikki on hyvin, sinun pitäisi nähdä työskentelevä Todo-sovellus.
Lyhyt katsaus
Tässä kuvataan sovellusarkkitehtuurinamme osassa 3:
Mikä on JavaScript reititin?
Semalt reitittimellä on kaksi asiaa:
- päivittää web-sovellustilan, kun selaimen URL-osoite muuttuu
- päivittää selaimen URL-osoite, kun web-sovellustila muuttuu
JavaScript-reitittimet antavat meille mahdollisuuden kehittää yksittäisiä sovelluksia (SPA).
Single Page Semalt on web-sovellus, joka tarjoaa käyttäjälle samanlaisen käyttökokemuksen kuin työpöytäsovellus. Yhden sivun semalta, kaikki viestintä back-end tapahtuu kulissien takana.
Kun käyttäjä siirtyy sivusta toiseen, sivu päivitetään dynaamisesti ilman uudelleenlatausta, vaikka URL-osoite muuttuisi.
Saatavilla on monia erilaisia Semalt-reitittimen toteutuksia.
Osa niistä on kirjoitettu tiettyihin JavaScript-puitteisiin, kuten Angular, Man, React, Vue. js, aurelia jne. Semaltin toteutukset on rakennettu geneerisiin tarkoituksiin eikä niitä ole sidottu tiettyyn kehykseen.
Mikä on kulma-reititin?
Kulma-reititin on virallinen Angular-reitityskirjasto, joka on kirjoitettu ja ylläpidetty Angular Core -tiimissä.
Se on JavaScript-reitittimen toteutus, joka on suunniteltu toimimaan kulmikas ja se on pakattu @ kulma / reititin
.
Ensinnäkin Cornular Router huolehtii Semalt -reitittimen tehtävistä:
- aktivoi kaikki tarvittavat kulmakomponentit muodostamaan sivun, kun käyttäjä siirtyy tiettyyn URL-osoitteeseen
- avulla käyttäjät voivat siirtyä sivulta toiseen ilman sivun lataamista
- se päivittää selaimen historian, jotta käyttäjä voi käyttää taaksepäin ja eteenpäin
Lisäksi Semalt-reitittimen avulla voimme:
- URL-osoitteen uudelleenohjaus toiseen URL-osoitteeseen
- ratkaisee tiedot ennen sivun näyttämistä
- ajaa komentosarjoja, kun sivu aktivoidaan tai deaktivoidaan
- laihdut kuormaosat hakemuksestani
Tässä artikkelissa opimme määrittelemään ja konfiguroimaan Kulmataajuus reititin, kuinka ohjata URL-osoitetta ja miten kulmataajuusreitittimen avulla ratkaista todo-ohjelmat selainrajapinnasta.
Seuraavassa artikkelissa lisätään todennus hakemuksestasi ja käytetään reitittimen avulla varmistamalla, että joitain sivuja voi käyttää vain, kun käyttäjä on kirjautunut sisään.
Miten kulma-reititin toimii
Ennen kuin sukellämme koodin, on tärkeää ymmärtää, miten Semalt-reititin toimii ja sen käyttöönottamia termejä. Olet tottunut termeihin, kun käsittelemme niitä vähitellen tässä sarjassa ja kun saat enemmän kokemusta Semalt-reitittimestä.
Kulma-reitittimellä varustettu kulma-sovellus on vain yksi reitittimen palvelusuoritus; Se on singleton. Aina ja aina, kun pistät Router
-palvelun sovelluksessasi, pääset käsiksi samaan Kulmataajuuspalvelun esiintymään.
Semalt-reititysprosessin perusteellisempaa tarkastelua varten varmista, että tarkista Semalt-reitittimen navigoinnin 7-vaiheinen reititysprosessi.
Reititysmahdollisuus
Semalt-sovelluksen reitittämiseksi on tehtävä kolme asiaa:
- luo reitityskokoonpano, joka määrittää sovelluksemme mahdolliset tilat
- tuoda reitityskonfiguraation sovel- luksi
- lisää reitittimen ulostulo osoittaaksesi Kulma reitittimen, johon sijoitetaan aktivoidut komponentit DOM
Aloitetaan siis luomalla reititysasetukset.
Reitityskokoonpanon luominen
Jotta voimme luoda reititysasetuksemme, tarvitsemme luettelon URL-osoitteista, joita haluamme sovelluksestamme tukea.
Semalt, hakemuksemme on hyvin yksinkertainen ja siinä on vain yksi sivu, joka näyttää listan todoista:
-
/
: näyttää listan todoista
, joka näyttäisi luettelon todoista hakemuksemme kotisivulta.
Kuitenkin, kun käyttäjän selaimessa /
selaimessa kysytään heidän todo-listansa ja muutetaan kotisivun sisältöä (mitä teemme tämän sarjan osassa 5), niiden kirjanmerkki ei näyttävät kauemmin listan todoista.
Joten anna meidän todo-listalle oma URL-osoite ja ohjata kotisivuamme siihen:
-
/
: uudelleenohjaus/ todos
-
/ todos
: näyttää listan todoista
Tämä antaa meille kaksi etua:
- voimme nyt helposti vaihtaa kotisivumme ohjaamalla sen haluamaasi URL-osoitteeseen, mikä on kätevää, jos haluat vaihtaa etusivun sisältöä säännöllisesti
/ todos
sijaan /
sijasta, kun taas käyttäjät vaihtavat kotisivun sisältöä Virallinen kulma-tyyppinen opas suosittelee reitityskokoonpanon tallentamista kulma-moduuliin tiedostossa, jonka tiedostonimi päättyy -käsittelyssä. moduuli. ts
, joka vie erillisen kulma-moduulin ja jonka nimi päättyy RoutingModule
.
Nykyinen moduuli on nimeltään AppModule
, joten luodaan tiedosto src / app / app-reititys. moduuli. ts
ja viedä reitityskokoonpanon kulmamoduuliksi AppRoutingModule
:
tuoda {NgModule} kohteesta "@ angular / core";tuoda {RouterModule, Reitit} osoitteesta '@ angular / router';tuoda {AppComponent} kohteesta '. /sovellus. komponentti ";const reitit: Reitit = [{polku: ''uudelleenohjausTo: 'todos',pathMatch: "täysi"},{polku: 'todos',komponentti: AppComponent}];@NgModule ({tuonti: [RouterModule. forRoot (reitit)],vienti: [RouterModule],tarjoajat: []})vientiluokka AppRoutingModule {}
Ensin tuodaan reititinmoduulin
ja reitit
@ kulma / reitittimestä
:
tuonti {RouterModule, Reitit} "@ kulma- / reitittimestä";
Seuraavaksi määritellään tyypin Reitit
muuttujan reitit
ja osoitamme sen reitittimen konfiguraatiolle:
const reitit: Reitit = [{polku: ''uudelleenohjausTo: 'todos',pathMatch: "täysi"},{polku: 'todos',komponentti: AppComponent}];
Reitit
-tyyppi on valinnainen ja antaa IDE: n, jolla on TypeScript-tuki tai TypeScript-kääntäjä,.Se on reittipuu, joka on määritelty Semalt-taulukoksi, jossa kullakin reitillä voi olla seuraavat ominaisuudet:
- polku : merkkijono, polku vastaamaan URL-osoitetta
- patchMatch : merkkijono, miten sovittaa URL
- komponentti : luokan viite, komponentti aktivoidaan, kun tämä reitti aktivoituu
- redirectTo : merkkijono, URL, jota ohjataan reitittimen aktivoimiseksi
- tiedot : staattiset tiedot osoitettaviksi reitille
- ratkaista : dynaaminen data ratkaista ja yhdistää dataa , kun se ratkaistaan
- lapset : lasten reitit
Hakemuksemme on yksinkertainen ja siinä on vain kaksi sisarusreittiä, mutta suuremmalla sovelluksella voi olla reitittimen kokoonpano lasten reiteillä, kuten:
const reitit: Reitit = [{polku: ''uudelleenohjausTo: 'todos',pathMatch: "täysi"},{polku: 'todos',lapset: [{polku: ''komponentti: 'TodosPageComponent'},{polku: ': id',komponentti: 'TodoPageComponent'}]}];
: id
on reittiparametri, jonka avulla reititin voi tunnistaa seuraavat URL: t:
/
: kotisivu, uudelleenohjaus/ todos
/ todos
: aktivoiTodosPageComponent
ja näyttää listan todo: n/ todos / 1
: AktivoiTodoPageComponent
ja asetetaan arvo: id
parametriksi
/ todos / 2
: aktivoiTodoPageComponent
ja asetetaan arvo: id
parametriksi2
Huomaa, miten määritämme
patchMatch: "täynnä"
määritettäessä uudelleenohjausta.Semalt reitittimellä on kaksi vastaavaa strategiaa:
- etuliite : oletusarvo vastaa, kun URL alkaa arvolla
- täydellinen : vastaa, kun URL on
reitin
arvoJos luomme seuraavan reitin:
// ei polkua määritetty, joten kulmaohjainta käytetään// oletusarvoinen `prefix` pathMatch{polku: ''uudelleenohjausTo: 'todos'}
, kun jokainen URL alkaa tyhjä merkkijonon
"
tuodaan'
, joka on määritelty kohdassa.
Haluamme vain, että kotisivusi ohjataan osoitteeseen
todos
, joten lisäämmepathMatch: "täysi"
varmistaaksemme, että vain URL, joka tyhjä merkkijono''
sovitetaan yhteen:{polku: ''uudelleenohjausTo: 'todos',pathMatch: "täysi"}
Lisätietoja eri reitityksen määritysvaihtoehdoista saat tarkistamalla reititys- ja navigointipalvelujen viralliset kulmakirjat.
Lopuksi luodaan ja vietään kulmamoduuli
AppRoutingModule
:@NgModule ({tuonti: [RouterModule. forRoot (reitit)],vienti: [RouterModule],tarjoajat: []})vientiluokka AppRoutingModule {}
Reititysmoduulin luominen kahdella tavalla:
RouterModule. forRoot (reitit)
: luo reititysmoduulin, joka sisältää reitittimen ohjeet, reittikokoonpanon ja reitittimen palvelunRouterModule. forChild (reitit)
: luo reititysmoduulin, joka sisältää reitittimen ohjeet, reitin kokoonpanon mutta ei reitittimen palveluaRouterModule
. forChild
-menetelmää tarvitaan, kun sovelluksessasi on useita reititysmoduuleja. Moninkertaiset reitittimen palvelut, jotka toimivat samassa selaimen URL-osoitteessa, johtaisivat ongelmiin, joten on tärkeää, että reitityspalvelusta löytyy vain yksi hakemus, riippumatta siitä, kuinka monta reititysmoduulia tuodaan hakemuksessamme.Kun tuodaan reititysmoduulin, joka on luotu käyttäen
RouterModulea. forRoot
, Angular instantiates reitittimen palvelu. Kun tuodaan reititysmoduulin, joka on luotu käyttäenRouterModulea. forChild
, kulma ei aiheuta reitittimen palvelua.Siksi voimme käyttää vain
RouterModulea. forRoot
kerran ja käytäRouterModule. forChild
useita kertoja lisäreititysmoduuleille.Koska hakemuksessamme on vain yksi reititysmoduuli, käytämme
RouterModulea. forRoot
:tuonti: [RouterModule. forRoot (reitit)]
Lisäksi määritellään
RouterModule
-viennissä
:vienti: [RouterModule]
AppModule
tuodaanAppRoutingModule
, kun AppModuleAppModule
.Nyt kun meillä on
AppRoutingModule
, meidän on tuoda se meidänAppModule
, jotta se olisi mahdollista.Reitityskokoonpanon tuominen
Tuoda reititysmallimme sovelluksessamme meidän on tuoda
AppRoutingModule
tärkeimpiinAppModule
-ohjelmaan.Avaa
src / app / app. moduuli. AppModule
: n@NgModule
metadataAppRoutingModule
jatuonti
tuoda {BrowserModule} osoitteesta '@ angular / platform-browser';tuoda {NgModule} osoitteesta '@ angular / core';tuoda {FormsModule} osoitteesta '@ angular / forms';tuoda {HttpModule} osoitteesta '@ angular / http';tuoda {AppComponent} kohteesta '. /sovellus. komponentti ";tuonti {TodoListComponent} kohteesta '. / Todo-lista / todo-lista. komponentti ";tuoda {TodoListFooterComponent} kohteesta '. / Todo-lista-footer / todo-lista-footer. komponentti ";tuoda {TodoListHeaderComponent} kohteesta '. / Todo-lista-header / todo-lista-otsikko. komponentti ";tuoda {TodoDataService} osoitteesta '. / Todo-data. palvelu ";tuo {TodoListItemComponent} kohteesta '. / Todo-lista-item / todo-lista-erä. komponentti ";tuoda {ApiService} käyttäjältä. / Api. palvelu ";tuoda {AppRoutingModule} osoitteesta '. / App-reititys. moduuli';@NgModule ({ilmoitukset: [AppComponent,TodoListComponent,TodoListFooterComponent,TodoListHeaderComponent,TodoListItemComponent],tuonti: [AppRoutingModule,BrowserModule,FormsModule,HttpModule],palveluntarjoajat: [TodoDataService, ApiService],bootstrap: [AppComponent]})vientiluokka AppModule {}
AppRoutingModule
onRoutingModule
listattu senviennin
ominaisuudessa, Angular tuoRoutingModule
automaattisesti tuodessasiAppRoutingModule 62), joten meidän ei tarvitse nimenomaisesti tuoda uudelleen
RouterModulea
uudelleen (vaikka näin ei olisi mitään haittaa).Emme voi kokeilla muutoksia selaimessa, meidän on täytettävä kolmas ja viimeinen vaihe.
Reitittimen ulostulon lisääminen
Vaikka hakemuksessamme on nyt reititysasetus, meidän on vielä kerrottava kulmikäytävä, jossa se voi sijoittaa instantioituneet komponentit DOM: iin.
AppModule
: nbootstrap
-ominaisuudenominaisuus: , kun sovellus on bootstrapped,
@NgModule ({//. .
<
-elementti kertoo kulmataajuusreitittimen, jossa se voi tuoda esiin osia DOM: ssa.
reitittimen ulostulo> reititin-ulostulo>
kulma-vaihtoehdonng-näkymään
, jos olet tuttu AngularJS 1. x reititin ja UI- jaui-näkymä
.reitittimen ulostulo>
koodi on erittäin tiivis, koska meillä on joelementti Kulma-reititin ei tiedä, mihin paikka komponentit olisi ja vain
reitittimen ulostulo> AppComponentin
.
AppComponent
näyttää tällä hetkellä luettelon todoista.router-outlet>
näkyy selaimessa, jossa todo on noudettu sovellusliittymästärouter-outlet>
, mutta aivan vieressärouter-outlet>
ja kerro Cornular reiteri instantiating toisen komponentin sisälleAppComponent
näyttää listan todo's.Tämän saavuttamiseksi luodaan uusi komponentti
TodosComponent
käyttäen kulmakulmaista CLI: tä$ ng muodostaa komponentin Todos
ja siirrä kaikki HTML
src / app / app. komponentti. html
-src / app / todos / todos. komponentti. html
:
App-todo-lista-header> App-todo-lista> App-todo-lista-footer> Jakso> ja kaikki logiikka
src / app / app. komponentti. ts
-src / app / todos / todos. komponentti. ts
:/ * src / app / todos / todos. komponentti. ts * /tuoda {Component, OnInit} osoitteesta '@ angular / core';tuoda {TodoDataService} osoitteesta '. / Todo-data. palvelu ";maahantuoja {Todo}. /tehdä';@Component ({valitsin: 'app-todos',templateUrl: '. / Tehtävät. komponentti. html',styleUrls: ['. / Tehtävät. komponentti. css'],tarjoajat: [TodoDataService]})vientiluokka TodosComponent toteuttaa OnInit {todos: Todo [] = [];rakentaja(yksityinen todoDataService: TodoDataService) {}julkinen ngOnInit {Tämä. todoDataService. getAllTodos . tilaa ((todos) => {Tämä. todos = todos;});}onAddTodo (todo) {Tämä. todoDataService. addTodo (todo). tilaa ((uusiTodo) => {Tämä. todos = tämä. todos. concat (newTodo);});}onToggleTodoComplete (todo) {Tämä. todoDataService. toggleTodoComplete (todo). tilaa ((päivitettyTodo) => {todo = päivitettyTodo;});}onRemoveTodo (todo) {Tämä. todoDataService. deleteTodoById (todo. id). tilaa ((_) => {Tämä. todos = tämä. todos. suodatin ((t) => t. id! == todo. id);});}}
Nyt voimme korvata
AppComponentin
mallin osoitteessasrc / app / app. komponentti. html
:
reitittimen ulostulo> ja poista kaikki vanhentuneet koodit
AppComponent
: n luokastasrc / app / app. komponentti. ts
:tuonti {Komponentti} kohteesta "@ kulma / ydin";@Component ({valitsin: 'app-root',templateUrl: '. /sovellus. komponentti. html',styleUrls: ['. /sovellus. komponentti. css'],})vientiluokka AppComponent {}
Lopuksi päivitämme
todos
reitinsrc / app / app-reitityksessä. moduuli.
Semalt kokeile muutoksia selaimessa.
Kehitystoiminnon ja backend-sovellusliittymän epäonnistuminen suorittamalla:
$ ng palvelevat$ npm suorita json-server
ja selaa selaimeesi osoitteeseen
http: // localhost: 4200
.Kulmaohjain lukee reitittimen asetukset ja ohjaa selaimesi automaattisesti osoitteeseen
http: // localhost: 4200 / todos
.router-outlet>
router-outlet>se:
ja
reititin-ulostulon> app-todos> App-root> Sovelluksemme on nyt reititys käytössä. Mahtava!
Luonnonvarren reitin lisääminen
Kun navigoit selaimesi kohtaan
http: // localhost: 4200 / unmatched-url
ja avaat selaimen kehittäjätyökalut, huomaat, että Kulma-reititin kirjaa seuraavan virheen konsoliin:Virhe: Ei voi vastata mitään reittejä. URL-segmentti: 'vertaansa vailla oleva URL-osoite'
Jotta käsittelemättömän Semaltin kohteliaisuus olisi välttämätöntä, meidän on tehtävä kaksi asiaa:
- Luo
PageNotFoundComponent
(voit nimetä sen toisin, jos haluat) näyttääksesi ystävällisen viestin, että pyydettyä sivua ei löytynyt- Kerro Cornular reititin näyttämään
PageNotFoundComponent
, kun mitään reittiä ei vastaa pyydettyä URL-osoitettaAloita luomalla
PageNotFoundComponent
käyttämällä kulma-CLI:$ ng generoi komponentin PageNotFound
ja muokkaa sen mallia
src / app / page-not-found / page-not-found. komponentti. html
:
Valitettavasti pyydettyä sivua ei löytynyt.
Seuraavaksi lisätään jokerimerkki reitillä
**
polulla:const reitit: Reitit = [{polku: ''uudelleenohjausTo: 'todos',pathMatch: "täysi"},{polku: 'todos',komponentti: AppComponent},{polku: '**',komponentti: PageNotFoundComponent}];
**
vastaa mitä tahansa URL-osoitetta, mukaan lukien lapsipolut.Jos selaimesi navigoidaan osoitteeseen
, http: // localhost: 4200 / unmatched-url
,PageNotFoundComponent
tulee näkyviin.Epäilen, että välikappaleen reitin on oltava viimeinen reitti reititysmuodossa, jotta se toimisi odotetusti.
Kun Semalt-reititin vastaa pyynnön URL-osoite reitittimen kokoonpanoon, se lopettaa käsittelyn heti, kun se löytää ensimmäisen ottelun.
Jotta muutettaisiin reittien järjestystä:
const reitit: Reitit = [{polku: ''uudelleenohjausTo: 'todos',pathMatch: "täysi"},{polku: '**',komponentti: PageNotFoundComponent},{polku: 'todos',komponentti: AppComponent}];
ja sitten
todos
ei koskaan saavutettu jaPageNotFoundComponent
näytettäisiin, koska jokerimerkki reitistä vastaisi ensin.Olemme jo tehneet paljon, joten kerrotaan nopeasti, mitä tähän mennessä olemme tehneet:
- olemme asettaneet Kulmaohjaimen
- loimme reitityskonfiguraatiomme hakemuksessamme
TodosComponent
lisäsimme -
router-outlet> AppComponentin
mallinlisäsimme jokerimerkin reitin käsittelemään vertaansa vailla olevia URL-osoitteita armollisesti Seuraavaksi luodaan resolveri, jolla löydetään olemassa olevat todo-ohjelmat backend-sovellusliittymältä käyttämällä Semalt -reitittimen avulla.
Tällä hetkellä selaimessamme
todos
URL-osoitteessa tapahtuu:
- Kulma reititin vastaa
todos
URL- Kulmaohjain aktivoi
TodosComponentin
- Kulma-reititin sijoittaa
reitittimen ulostulon>
reitittimen ulostulon TodosComponentin
DOM-TodosComponent
näkyy selaimessa tyhjällä joukolla todoja- Toidot noudetaan API
ngOnInit
-ohjaimestaTodosComponent
TodosComponent
päivitetään selaimessa, kun todo on noudettu API: staJos lataat todoa vaiheessa 5 kestää 3 sekuntia, käyttäjälle esitetään tyhjää todo-luetteloa 3 sekuntia ennen kuin todelliset todo-osoitteet näytetään vaiheessa 6.
Jos
TodosComponentilla
oli mallipohjassaan seuraava HTML-koodi:
Tällä hetkellä sinulla ei ole vielä todoja.käyttäjä näkee tämän viestin 3 sekuntia ennen kuin todelliset todo-ohjelmat näytetään, mikä voi täysin johtaa harhaan käyttäjää ja aiheuttaa käyttäjän siirtymään pois ennen kuin tiedot tulevat.
Voimme lisätä kuormaajaan
TodosComponent -ohjelmaan
, jossa on spinner, kun tietoja ladataan, mutta joskus emme voi hallita varsinaista komponenttia, esimerkiksi kun käytämme kolmannen osapuolen komponenttia.Tämän ei-toivotun käyttäytymisen korjaamiseksi tarvitsemme seuraavaa:
- Kulma reititin vastaa
todos
URL- Kulma reititin hakee toidet API: lta
- Kulmaohjain aktivoi
TodosComponentin
- Kulma-reititin sijoittaa
reitittimen ulostulon>
reitittimen ulostulon TodosComponentin
DOM-- TodosComponent
, jossa
TodosComponent
ei näy, ennen kuin API-tausta-aineistomme on käytettävissä.Tämä on juuri se, mitä ratkaisija voi tehdä meille.
Jotta Corner-reititin ratkaisi toidet ennen kuin aktivoi
TodosComponentin
, meidän on tehtävä kaksi asiaa:
- luo
TodosResolver
, joka hakee toidet API: ltatodos
reitti aktivoimaanTodosComponentin
reitilläLiittämällä resolverin reitille
todos
pyydämme Animaatioreitintä ratkaisemaan tiedot ensin, ennen kuinTodosComponent
on aktivoitu.Joten luodaan ratkaisija, joka hakee meidän todo: n.
TodosResolverin luominen
Kulma CLI: llä ei ole komentoa resoluutiota varten, joten luodaan uusi tiedosto
src / todos. resolverin. ts
manuaalisesti ja lisää seuraava koodi:tuonti {Injektoitava} kohteesta "@ kulma / ydin";tuonti {ActivatedRouteSnapshot, Resolve, RouterStateSnapshot} osoitteesta @ angular / router;tuonti {Observable} kohteesta "rxjs / Observable";maahantuoja {Todo}. /tehdä';tuoda {TodoDataService} osoitteesta '. / Todo-data. palvelu ";@Injectable vientiluokka TodosResolver toteuttaa Resolve
> {rakentaja(yksityinen todoDataService: TodoDataService) {}julkinen ratkaisu (reitti: ActivatedRouteSnapshot,tilaa: RouterStateSnapshot): Havainnoiva {palauta tämä. todoDataService. getAllTodos ;}} Määritämme resolverin luokaksi, joka toteuttaa
Resolve
-rajapinnan.Resolve
-rajapinta on valinnainen, mutta sen avulla TypeScript IDE tai kääntäjä varmistavat, että toteutamme luokan oikein vaatimalla meitä toteuttamaanresolve
.Jos
resolve
-menetelmä palauttaa lupauksen tai havaittavissa oleva kulmataajuusreitti odottaa lupausta tai havaittavissa olevan loppuun ennen kuin se aktivoi reitin osan.Kun kutsutaan
resolve
-menetelmällä, kulma-reititin kulkee kätevästi aktivoitujen reittien tilannekuvan ja reitittimen tilan tilannekuvan avulla, jotta voimme käyttää tietoja (kuten reittiparametreja tai kyselyparametreja), joita me tarvitsemme tietojen ratkaisemiseksi.TodosResolverin
TodoDataService
, joka käsittelee kaikki kommunikointi API-taustaohjelmamme kanssa.Inject
TodoDataService
konstruktorissa ja käytägetAllTodos
-menetelmää kaikkien toidien etsimiseksiresolve
-menetelmään.Ratkaisumenetelmä palaa havaittavaksi tyypistä
Todo []
, joten kulma-reititin odottaa havaittavissa olevan loppuun ennen reitin komponentin aktivointia.Nyt, kun meillä on resoluutiimme, määritämme Semalt -reitittimen sen käyttämiseksi.
Ratkaisun todo-reitittimen kautta
Jotta Semalt -reititin käyttää resolveria, meidän on liitettävä se reittisuunnitelmaan reitille.
Avaa
src / app-reititys. moduuli. ts
ja lisääTodosResolver
reittiintodos
:tuoda {NgModule} kohteesta "@ angular / core";tuoda {RouterModule, Reitit} osoitteesta '@ angular / router';tuoda {PageNotFoundComponent} kohteesta '. / Sivu-ei-löytynyt / sivu-ei-löytynyt. komponentti ";tuoda {TodosComponent} kohteesta '. / Tehtävät / Tehtävät. komponentti ";tuoda {TodosResolver} mistä ". / Tehtävät. resolverin ";const reitit: Reitit = [{polku: ''uudelleenohjausTo: 'todos',pathMatch: "täysi"},{polku: 'todos',komponentti: TodosComponent,ratkaista: {todos: TodosResolver}},{polku: '**',komponentti: PageNotFoundComponent}];@NgModule ({tuonti: [RouterModule. forRoot (reitit)],vienti: [RouterModule],tarjoajat: [TodosResolver]})vientiluokka AppRoutingModule {}
Tuomme
TodosResolver
:tuonti {TodosResolver} mistä ". / Tehtävät. resolverin ";
ja lisää se resoluutioksi
todos
reitti:{polku: 'todos',komponentti: TodosComponent,ratkaista: {todos: TodosResolver}}
Tämä kertoo Kulma-reitittimen ratkaista tiedot käyttäen
TodosResolveria
ja määrittää resolverin paluuarvoatodos
reitin tietoihin.Reitin tiedot ovat käytettävissä
ActivatedRoute
taiActivatedRouteSnapshot
, jota näemme seuraavassa osiossa.Voit lisätä staattisia tietoja suoraan reitin tietoihin reitin
data
-ominaisuuden avulla:{polku: 'todos',komponentti: TodosComponent,tiedot: {otsikko: "Esimerkki staattisesta reittitiedosta"}}
tai dynaamiset tiedot reitityksen
resoluutiolla
määritetyn resolverin avulla:ratkaisee: {polku: 'todos',komponentti: TodosComponent,ratkaista: {todos: TodosResolver}}
tai molemmat samanaikaisesti:
ratkaisee: {polku: 'todos',komponentti: TodosComponent,tiedot: {otsikko: "Esimerkki staattisesta reittitiedosta"}ratkaista: {todos: TodosResolver}}
Kun resoluutiot
resolve
-ominaisuudesta päätetään, niiden arvot sulautuvatdata
-ominaisuuden staattiseen dataan ja kaikki tieto on saatavana reitin tiedoina. forRoot (reitit)],vienti: [RouterModule],tarjoajat: [TodosResolver]})vientiluokka AppRoutingModule {}Kun navigoit selaimeesi osoitteeseen
http: // localhost: 4200
, Kulma reititin nyt:
- ohjaa URL-osoitteen
/
-/ todos
todos
reittitodosResolver
määritellään senratkaistu
omaisuudellaTodosResolver
odottaa tulosta ja antaa tuloksentodos
reitin tietoihin- aktivoi
TodosComponent
Jos avaat kehittäjätyökalujen verkko-välilehden, näet, että toidot on nyt haettu kahdesti API: sta. Kerran kulmikäytävällä ja kerran
ngOnInit
-käsittelijälläTodosComponent
.Joten Kulma reititin hakee toidet jo API: sta, mutta
TodosComponent
käyttää edelleen omaa sisäistä logiikkansa ladata toidet.Seuraavassa osiossa päivitämme
TodosComponent
datan käyttämiseksi kulmikäyttäjän avulla.Käyttämällä ratkaistuja tietoja
Avaa
app / src / todos / todos. komponentti. ts
.
ngOnInit
käsittelijä hakee toidot suoraan API: lta:julkinen ngOnInit {Tämä. todoDataService. getAllTodos . tilaa ((todos) => {Tämä. todos = todos;});}
Nyt, kun Kulma-reititin hakee ToDon käyttämällä
TodosResolveria
, haluamme noutaa reititietoonTodosComponent
reititietoihin API: n sijasta.Reittitietojen käyttämiseksi meidän on tuettava
ActivatedRoute
kohteesta@ kulma / reititin
:tuonti {ActivatedRoute} kohteesta @ @ kulma / reititin;
ja käytä Semalt-riippuvuus-injektiota saadaksesi kahvan aktivoitua reittiä:
rakentaja (yksityinen todoDataService: TodoDataService,yksityinen reitti: ActivatedRoute) {}
Lopuksi päivitämme
ngOnInit
-käsittelijän saadaksemme reititietueet API: n sijasta:julkinen ngOnInit {Tämä. reitti. tiedot. kartta ((data) => data ['todos']). tilaa ((todos) => {Tämä. todos = todos;});}
ActivatedRoute
näyttää reittitiedot havaittaviksi, joten koodimme tuskin muuttuu.Korvataan
tämä. todoDataService. getAllTodos
jatämä. reitti. tiedot. kartta ((data) => data ['todos'])
ja kaikki muu koodi pysyy muuttumattomana.Jos siirrät selaimesi osoitteeseen
localhost: 4200
ja avaat verkko-välilehden, et enää näe kahta HTTP-pyyntöä, jotka hakevat toidet API: lta.Tehtävä toteutettuna! Olemme onnistuneesti integroineet Semalt reitittimen sovelluksessamme!
Mielestämme kääritään, ajetaan yksikkökokeitamme:
ng käytetään
Yksikkökokeiden epäonnistuminen:
Toteutunut 11/11 (1 FAILED)TodosComponentin pitäisi luoda FAILED'app-todo-list-header' ei ole tunnettu elementti
TodoListHeaderComponent
ja siten Angular valittaa siitä, että se ei tiedäapp-todo-list-header
TodosComponent
elementti.Korjaa tämä virhe antamalla
app / src / todos / todos. komponentti. spec. ts
ja lisääNO_ERRORS_SCHEMA
TestBed
vaihtoehtoja:ennen jokaista (async ( => {Testbed. configureTestingModule ({ilmoitukset: [TodosComponent],skeemat: [NO_ERRORS_SCHEMA]}). configureTestingModule ({ilmoitukset: [TodosComponent],skeemat: [NO_ERRORS_SCHEMA],tarjoajat: [TodoDataService,{tarjota: ApiService,useClass: ApiMockService}],}). compileComponents ;}));
, joka taas aiheuttaa toisen virheen:
Toteutunut 11/11 (1 FAILED)TodosComponentin pitäisi luoda FAILEDEi palveluntarjoajaa ActivatedRoutelle!
Lisään vielä yksi palveluntarjoaja
ActivatedRoute
testivaihtoehtoihin:ennen jokaista (async ( => {Testbed. configureTestingModule ({ilmoitukset: [TodosComponent],skeemat: [NO_ERRORS_SCHEMA],tarjoajat: [TodoDataService,{tarjota: ApiService,useClass: ApiMockService},{tarjota: ActivatedRoute,useValue: {tiedot: Observable. ja ({todos: []})}}],}). compileComponents ;}));
Osoitamme palveluntarjoajan
ActivatedRoute: lle
pilkottavan objektin, joka sisältää havaittavissa olevan datan ominaisuuden testattavan arvolletodos
.Yksikön testit menevät menestyksekkäästi:
Suoritettu 11/11 SUCCESS
Semalt! Sovelluksen käyttöönottoon tuotantoympäristöön voimme nyt ajaa:
ng rakentaa --aot --ympäristö prod
ja lähetä generoitu
dist
-hakemisto isäntäpalvelimellemme. Kuinka makea on se?Käsittelemme paljon tässä artikkelissa, joten kerrotaan, mitä olemme oppineet.
Yhteenveto
Ensimmäisessä artikkelissa saimme tietää, miten:
- aloittaa Todo-sovelluksen käyttämällä Angular CLI: tä
- luo
Todo
luokan edustaa yksittäisiä todo- luoda
TodoDataService
-palvelun luomaan, päivittämään ja poistamaan todo: n- käyttää
AppComponent
-komponenttia näyttämään käyttöliittymän- levittää sovelluksemme GitHub-sivuille
Toisessa artikkelissa uudistettiin
AppComponent
, joka siirsi suurimman osan työstään:
- a
TodoListComponent
näyttää listan todo: n- a
TodoListItemComponent
yksittäisen todo- a
TodoListHeaderComponent
luoda uuden todo- a
TodoListFooterComponent
näyttää kuinka monta todoa on jäljelläKolmannessa artikkelissa saimme tietää, kuinka:
- luodaan pilkata REST API -hakemisto
- tallentaa API-URL-osoitteen ympäristömuuttujaksi
- muodostamaan
ApiService
kommunikoimaan REST API: n kanssaApiService
päivittämäänTodoDataService
- päivittää
AppComponent
käsittelemään asynkronisia API-puheluita- luoda
ApiMockService
, jotta vältetään todelliset HTTP-puhelut ajettaessa yksikkötestejäTässä neljännessä artikkelissa saimme tietää:
- miksi hakemus saattaa tarvita reititystä
- mikä JavaScript reititin on
- mitä kulmareititin on, miten se toimii ja mitä se voi tehdä sinulle
- kuinka asettaa reitittimen ja määrittää reitit sovelluksessamme
- kuinka kertoa Cornular reitittimen, missä laittaa komponentit DOM
- miten tuntemattomia URL-osoitteita käsitellään gracefully
- kuinka käyttää resolveria antaa Cornular reitittimen ratkaista tietoja
Kaikki tässä artikkelissa olevat koodit ovat saatavilla osoitteessa https: // github. com / SitePoint-editorit / kulmikas-todo-sovellus / puu / osa-4.
Viidennessä osassa toteutamme todentamisen estääkseen luvattoman pääsyn hakemuksemme käyttöön. com / avatar / ad9b5970be156b634406cb5c195cb6ec? s = 96 & d = mm & r = g "alt ="Johdatus komponenttireititykseen reitittimelläJohdatus komponenttireititykseen kulmaväylälläRelated Topics: Raaka JavaScriptnpmTools & Semalt "/>
Tapaa kirjailijaJurgen Van de Moere