AngularJs-reititys parametreilla

โšก ร„lykรคs yhteenveto

AngularJS:n reititys muuttaa yhden HTML-sivun moninรคkymรคsovellukseksi kartan avullaping URL fragmentit malleiksi ja ohjaimiksi. ngRoute-moduuli ja $routeProvider-palvelu mรครคrittelevรคt nรคmรค kartatpings, kun taas ng-view-direktiivi injektoi vastaavan mallineen.

  • ๐Ÿงฉ Ydinmekanismi: $routeProvider yhdistรครค #-symbolin jรคlkeisen fragmentin ja lataa paritetun templateUrl:n ja ohjaimen ng-view'hun.
  • ๐Ÿ“ฆ Vaadittu riippuvuus: Reititys sijaitsee ydinkirjaston ulkopuolella, joten angular-route.js-tiedostoon on viitattava ja ngRoute on mรครคriteltรคvรค moduulissa.
  • ๐ŸŽฏ Oletusreitti: Muuten lohko uudelleenohjaa kaikki tรคsmรครคmรคttรถmรคt polut estรคen tyhjรคn nรคkymรคn, kun sovellus latautuu ensimmรคisen kerran.
  • ๐Ÿ”ข Reittiparametrit: Kaksoispisteen paikkamerkki, kuten :topicId, tallentaa URL segmentit, jotka ohjain lukee $routeParams-muuttujalla.
  • โณ Tiedon esilataus: resolve-ominaisuus lopettaa datan noutamisen ennen ohjaimen suorittamista, joten nรคkymรค ei koskaan renderรถidy tyhjรครคn tilaan.
  • ๐Ÿ”— Clean URLs: html5Mode-asetuksen asettaminen $locationProvider-kohteelle poistaa tiivisteen, vaikka palvelimen on tรคllรถin kirjoitettava tuntemattomat polut uudelleen perussivulle.

AngularJS-reititys parametreilla

Ennen kuin tarkastelemme reitityksen toimintaa AngularJS:ssรค, on hyรถdyllistรค ymmรคrtรครค, millaiseen sovelluksen reititys on rakennettu. Alla oleva osio asettaa tรคmรคn kontekstin, ja jokainen seuraava tekniikka perustuu siihen.

Mitรค yksisivuiset sovellukset ovat?

Yksisivuiset sovellukset eli SPA:t ovat verkkosovelluksia, jotka lataavat yhden HTML-sivun ja pรคivittรคvรคt sitรค dynaamisesti kรคyttรคjรคn ollessa vuorovaikutuksessa sen kanssa. Sen sijaan, ettรค SPA pyytรคisi palvelimelta uutta dokumenttia jokaisella napsautuksella, se vaihtaa vain sivun muuttuneen osan.

Tuo suunnittelu luo yhden ongelman. Jos selain ei koskaan siirry uuteen dokumenttiin, osoiterivi ei koskaan muutu, joten kรคyttรคjรค ei voi lisรคtรค nรคyttรถรค kirjanmerkkeihin, jakaa sitรค tai kรคyttรครค takaisin-painiketta. Reititys ratkaisee juuri tรคmรคn ongelman.

Mitรค on reititys AngularJS:ssรค?

Reititys AngularJS:ssรค on menetelmรค, jonka avulla voit luoda yksisivuisia sovelluksia. Sen avulla voit luoda erilaisia URLs eri sisรคllรถlle verkkosovelluksissasi. AngularJS-reititys auttaa myรถs nรคyttรคmรครคn useita sisรคltรถjรค valitusta reitistรค riippuen. Se on mรครคritetty URL #-merkin jรคlkeen.

Otetaan esimerkki sivustosta, jota isรคnnรถidรครคn URL http://example.com/index.html.

Tรคmรค sivu isรคnnรถi sovelluksesi pรครคnรคyttรถรค. Oletetaan, ettรค sovellus jรคrjestรครค tapahtuman ja kรคyttรคjรค haluaa listata tapahtumat, tarkastella yhtรค tapahtumaa yksityiskohtaisesti tai poistaa sen. Yhden sivun sovelluksessa, jossa reititys on kรคytรถssรค, kaikki tรคmรค on saatavilla seuraavien linkkien kautta.

#-symbolia kรคytettรคisiin eri reittien yhteydessรค (ShowEvent, DisplayEvent ja DeleteEvent).

  • Kรคyttรคjรครค ohjataan nรคkemรครคn kaikki tapahtumat osoitteeseen http://example.com/index.html#ShowEvent
  • Nรคhdรคkseen tietyn tapahtuman heidรคt ohjataan http://example.com/index.html#DisplayEvent
  • Tapahtuman poistamiseksi heidรคt ohjataan osoitteeseen http://example.com/index.html#DeleteEvent

Huomaa, ettรค pรครคasiallinen URL pysyy samana. Vain #-merkin jรคlkeinen fragmentti muuttuu, ja AngularJS tarkkailee tรคtรค fragmenttia. Kun konsepti on vakiintunut, seuraava osio kรคsittelee osia, jotka on kytkettรคvรค yhteen ennen kuin mikรครคn toimii.

AngularJS-reitin lisรครคminen kรคyttรคmรคllรค $routeProvider-ohjelmaa

Kuten aiemmin kรคsiteltiin, reitit angularjs kรคytetรครคn kรคyttรคjรคn reitittรคmiseen sovelluksesi toiseen nรคkymรครคn. Tรคmรค reititys tehdรครคn samalla HTML-sivulla, joten kรคyttรคjรคllรค on kokemus, ettei hรคn ole poistunut sivulta.

Reitityksen toteuttamiseksi seuraavat pรครคvaiheet on toteutettava sovelluksessasi missรค tahansa tietyssรค jรคrjestyksessรค.

  1. Viittaa tiedostoon angular-route.js. Tรคmรค JavaKรคsikirjoitus tiedosto, kehittรคnyt Google, sisรคltรครค kaikki reititystoiminnot ja se on sisรคllytettรคvรค, jotta sovellus voi viitata moduulien reititystarpeisiin.
  2. Lisรครค sovelluksestasi riippuvuus ngRoute-moduuliin. Ilman tรคtรค riippuvuutta reititystรค ei voida kรคyttรครค AngularJS-sovelluksessa lainkaan.

Alla on tรคmรคn lausunnon yleinen syntaksi. Tรคmรค on vain tavallinen moduulin ilmoitus, joka sisรคltรครค avainsanan ngRoute.

var module = angular.module("sampleApp", ['ngRoute']);
  1. Mรครคritรค $routeProvider. Tรคmรค tarjoaa sovelluksesi eri reitit, ja syntaksi yksinkertaisesti sanoo, ettรค kun asiaankuuluva polku on valittu, reittiรค kรคytetรครคn annetun nรคkymรคn nรคyttรคmiseen.
when(path, route)
  1. Linkit reitille HTML-sivultasi. Lisรครคt HTML-sivullesi viitelinkkejรค sovelluksessasi oleville eri reiteille.
<a href="#!/route1">Route 1</a><br/>
  1. Lopuksi olisi sisรคllytettรคvรค ng-view direktiivi, joka olisi normaalisti div-tunnisteessa. Tรคtรค kรคytettรคisiin nรคkymรคn sisรคllรถn lisรครคmiseen, kun relevantti reitti valitaan.

๐Ÿ’ก Vinkki: Kaikki viisi vaihetta ovat pakollisia. Puuttuva angular-route.js-viittaus on yleisin syy siihen, miksi reitti ei tee mitรครคn hiljaisesti, koska $routeProvider-muuttujaa ei ole olemassa ilman sitรค. Seuraavassa osiossa kaikki viisi vaihetta yhdistetรครคn toimivaksi esimerkiksi.

Esimerkki AngularJS-reitityksestรค

Katsotaanpa nyt esimerkkiรค reitityksestรค kรคyttรคmรคllรค yllรค mainittuja vaiheita.

AngularJS-reititysesimerkissรคmme parametreilla

  • Yksi linkki nรคyttรครค aiheet angularjs tietenkin, ja toinen on varten Node.js kurssi.
  • Kun kรคyttรคjรค napsauttaa jompaakumpaa linkkiรค, kyseisen kurssin aiheet tulevat nรคkyviin.

Vaihe 1) Sisรคllytรค kulmareittitiedosto komentosarjaviittaukseksi.

AngularJS-reititys

Tรคmรค reittitiedosto on vรคlttรคmรคtรถn, jotta useiden reittien ja nรคkymien toimintoja voidaan hyรถdyntรครค. Tiedoston voi ladata AngularJS:n verkkosivustolta.

Vaihe 2) Lisรครค href-tunnisteita, jotka edustavat linkkejรค "Angular JS-aiheisiin" ja "Node JS-aiheisiin".

AngularJS-reititys

Vaihe 3) Lisรครค div-tunniste ng-view-direktiivin kanssa, joka edustaa nรคkymรครค.

Tรคmรค mahdollistaa vastaavan nรคkymรคn lisรครคmisen aina, kun kรคyttรคjรค napsauttaa joko "Angular JS-aiheita" tai "Solmu JS-aiheita".

AngularJS-reititys

Vaihe 4) Lisรครค AngularJS:n komentosarjatunnisteeseen "ngRoute module" ja "$routeProvider" -palvelu.

AngularJS-reititys

Code Selitys:

  1. Sisรคllytรค โ€ngRoute-moduuliโ€. Tรคmรคn avulla Angular kรคsittelee reitityksen automaattisesti ja ymmรคrtรครค kaikki reitityskomennot.
  2. $routeProvider on palvelu, joka kuuntelee taustalla kutsuttuja reittejรค. Kun kรคyttรคjรค napsauttaa linkkiรค, se havaitsee tรคmรคn ja pรครคttรครค, mitรค reittiรค valitaan.
  3. Luo yksi reitti Angular-linkille: kun sitรค klikataan, lisรครค Angular.html ja kรคytรค 'AngularController'-logiikkaa.
  4. Luo yksi reitti Node-linkille, joka injektoi Node.html-tiedoston ja kรคyttรครค 'NodeController'-objektia samalla tavalla.

Vaihe 5) Seuraavaksi on lisรคttรคvรค ohjaimia kรคsittelemรครคn liiketoimintalogiikka sekรค AngularControllerille ettรค NodeControllerille.

Jokaiseen ohjaimeen luomme avain-arvo-pareista koostuvan taulukon, johon tallennetaan kunkin kurssin aiheiden nimet ja kuvaukset. Taulukkomuuttuja 'tutorial' lisรคtรครคn kunkin ohjaimen scope-objektiin.

AngularJS-reititys

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Event Registration</title>
</head>
<body ng-app="sampleApp">

<script src="https://code.angularjs.org/1.8.3/angular.min.js"></script>
<script src="https://code.angularjs.org/1.8.3/angular-route.js"></script>

<h1> Guru99 Global Event</h1>

<div class="container">
<ul>
<li><a href="#!/Angular">Angular JS Topics</a></li>
<li><a href="#!/Node">Node JS Topics</a></li>
</ul>
<div ng-view></div>
</div>

<script>
var sampleApp = angular.module('sampleApp', ['ngRoute']);

sampleApp.config(['$routeProvider',
function($routeProvider) {
  $routeProvider.
  when('/Angular', {
    templateUrl: 'Angular.html',
    controller: 'AngularController'
  }).
  when('/Node', {
    templateUrl: 'Node.html',
    controller: 'NodeController'
  });
}]);

sampleApp.controller('AngularController', function($scope) {
  $scope.tutorial = [
    {Name: "Controllers", Description: "Controllers in action"},
    {Name: "Models", Description: "Models and binding data"},
    {Name: "Directives", Description: "Flexibility of Directives"}
  ];
});

// NodeController follows the same shape with Node.js topics
sampleApp.controller('NodeController', function($scope) {
  $scope.tutorial = [{Name: "Promises", Description: "Power of Promises"}];
});
</script>
</body>
</html>

โš ๏ธ Korjaukset tehty. <title> lappu istui sisรคllรค <body>, chrset="UTF 8" oli kirjoitettu vรครคrin, toinen linkki osoitti #Node.html rekisterรถidyn reitin sijaan /Node, ja mallipolut sisรคlsivรคt alkuviivan, joka ratkeaa verkkotunnuksen juuresta.

AngularJS-reititys

Vaihe 6) Luo sivut nimeltรค Angular.html ja Node.html. Suoritamme jokaiselle sivulle alla olevat vaiheet.

Nรคmรค vaiheet varmistavat, ettรค kaikki taulukon avain-arvo-parit nรคkyvรคt jokaisella sivulla.

  1. Kรคyttรคen ng-repeat direktiivi kรคydรค lรคpi kaikki tutoriaalimuuttujassa mรครคritellyt avain-arvo-parit.
  2. Nรคyttรครค kunkin avain-arvo-parin nimen ja kuvauksen.
  • Kulma.html
<h2>Angular</h2>
<ul ng-repeat="ptutor in tutorial">
<li>Course : {{ptutor.Name}} - {{ptutor.Description}}</li>
</ul>
  • Node.html โ€” identtinen yllรค olevan listan kanssa, otsikko on muutettu muotoon โ€Solmuโ€. Molemmat mallit lukevat samalla tavalla tutorial muuttuja, jonka kukin ohjain syรถttรครค omasta laajuusalueestaan.

AngularJS-reititys

โš ๏ธ korjaus: Alkuperรคisen Angular.html-tiedoston otsikko oli โ€Angulerโ€. Oikeinkirjoitus on korjattu yllรค.

Jos koodi suoritetaan onnistuneesti, seuraava tuloste nรคkyy, kun suoritat koodisi selaimessa.

lรคhtรถ:

AngularJS-reititys

Jos napsautat AngularJS Topics -linkkiรค, alla oleva tuloste tulee nรคkyviin.

AngularJS-reititys

Tulos osoittaa selvรคsti, ettรค

  • Kun "Angular JS Topics" -linkkiรค napsautetaan, koodissamme ilmoittamamme routeProvider pรครคttรครค, ettรค Angular.html-koodi tulee lisรคtรค.
  • Tรคmรค koodi ruiskutetaan "div"-tunnisteeseen, joka sisรคltรครค ng-view-direktiivin. Kurssin kuvauksen sisรคltรถ tulee myรถs "harjoitusmuuttujasta", joka oli osa AngularControllerissa mรครคriteltyรค soveltamisalaobjektia.
  • Kun napsauttaa Node.js Aiheet, sama tulos tapahtuu, ja Node.js-aiheiden nรคkymรค nรคytetรครคn.
  • Huomaa myรถs, ettรค sivu URL pysyy samana. Vain #-tagin jรคlkeinen reitti muuttuu, ja tรคmรค on yksisivuisten sovellusten kรคsite. #hash-tagi URL on erotinmerkki reitin (joka tรคssรค tapauksessa on 'Angular') ja HTML-pรครคsivun (Sample.html) vรคlillรค.

AngularJS-reititys

Esimerkki toimii vain, kun kรคyttรคjรค napsauttaa rekisterรถityรค reittiรค vastaavaa linkkiรค. Seuraavassa osiossa kรคsitellรครคn, mitรค pitรคisi tapahtua, kun mikรครคn ei vastaa reitin osumia.

Oletusreitin luominen AngularJS:ssรค

AngularJS:n reititys tarjoaa myรถs mahdollisuuden oletusreitille. Tรคmรค on reitti, joka valitaan, jos olemassa olevaa reittiรค ei lรถydy.

Oletusreitti luodaan lisรครคmรคllรค seuraava ehto mรครคriteltรคessรค $routeProvider-palvelua.

Alla oleva syntaksi tarkoittaa yksinkertaisesti uudelleenohjausta toiselle sivulle, jos jokin olemassa olevista reiteistรค ei tรคsmรครค.

otherwise({
  redirectTo: 'page'
});

Kรคytetรครคn samaa yllรค olevaa esimerkkiรค ja lisรคtรครคn oletusreitti $routeProvider-palveluumme.

Oletusreitin luominen AngularJS:ssรค

sampleApp.config(['$routeProvider',
function($routeProvider) {
  $routeProvider.
  when('/Angular', {
    templateUrl: 'Angular.html',
    controller: 'AngularController'
  }).
  when('/Node', {
    templateUrl: 'Node.html',
    controller: 'NodeController'
  }).
  otherwise({
    redirectTo: '/Angular'
  });
}]);

Code Selitys:

  1. Tรคssรค kรคytรคmme samaa koodia kuin yllรค, ainoana erona se, ettรค kรคytรคmme otherwise-lauseketta ja "redirectTo"-optiota mรครคrittรครคksemme, mikรค nรคkymรค ladataan, jos reittiรค ei ole mรครคritetty. Tรคssรค tapauksessa haluamme nรคytettรคvรคn '/Angular'-nรคkymรคn.

Jos koodi suoritetaan onnistuneesti, seuraava tuloste nรคkyy, kun suoritat koodisi selaimessa.

lรคhtรถ:

Oletusreitin luominen AngularJS:ssรค

Ulostulosta,

  • Voit selvรคsti nรคhdรค, ettรค oletusnรคkymรค on AngularJS-nรคkymรค.
  • Tรคmรค johtuu siitรค, ettรค kun sivu latautuu, se siirtyy $routeProvider-funktion "muutoin" -vaihtoehtoon ja lataa "/Angular"-nรคkymรคn.

Oletusreitti mรครคrittรครค, mikรค nรคkymรค ladataan. Seuraavassa osiossa kรคsitellรครคn, kuinka yksi reitti voi palvella useita tietueita siirtรคmรคllรค arvon URL.

Kuinka kรคyttรครค parametreja AngularJS-reitiltรค

Angular tarjoaa myรถs toiminnallisuuden parametrien vรคlittรคmiseen reitityksen aikana. Parametrit lisรคtรครคn reitin loppuun URLEsimerkiksi http://guru99/index.html#/Angular/1. Tรคssรค kulmareititysesimerkissรค

  1. http://guru99/index.html on tรคrkein sovelluksemme URL
  2. #-symboli on erotinmerkki pรครคsovelluksen ja URL ja reitti
  3. Kulma on reittimme
  4. Ja lopuksi '1' on parametri, joka lisรคtรครคn reittiimme

Yleinen syntaksi on HTMLSivu#/reitti/parametri, joten aiemmista aiheista tulee Sample.html#/Angular/1, #/Angular/2 ja #/Angular/3, jossa numero on aiheen id.

Katsotaanpa tarkemmin, miten voimme toteuttaa Angular-reitin parametrilla.

Vaihe 1) Lisรครค seuraava koodi nรคkymรครคn

  1. Lisรครค taulukko, joka nรคyttรครค kรคyttรคjรคlle kaikki Angular JS -kurssin aiheet.
  2. Lisรครค taulukkoon rivi, joka nรคyttรครค aiheen โ€Ohjaimetโ€. Aseta tรคlle riville href-tunniste arvoon โ€#!/Angular/1โ€, jotta aiheen napsauttaminen vรคlittรครค parametrin 1. URL reitin mukana.
  3. Lisรครค rivi aiheelle โ€Mallitโ€ ja aseta href-tagi arvoon โ€#!/Angular/2โ€, jotta parametri 2 kulkee URL.
  4. Lisรครค rivi aiheelle โ€Direktiivitโ€, jonka href-tunniste on asetettu arvoon โ€#!/Angular/3โ€, jotta parametri 3 kulkee URL.

Kรคytรค parametreja AngularJS-reitiltรค

Vaihe 2) Lisรครค aiheen tunnus routeProvider-palvelufunktioon
Lisรครค routeProvider-palvelufunktioon :topicId paikkamerkki, joka osoittaa, ettรค mikรค tahansa parametri vรคlitetรครคn URL reitin jรคlkeen tulee asettaa muuttujaan topicId.

Kรคytรค parametreja AngularJS-reitiltรค

Vaihe 3) Lisรครค tarvittava koodi ohjaimeen

  1. Muista ensin lisรคtรค parametriksi โ€$routeParamsโ€, kun mรครคritรคt ohjainfunktiota. Tรคllรค parametrilla on pรครคsy kaikkiin reittiparametreihin, jotka vรคlitetรครคn URL.
  2. โ€$routeParamsโ€ sisรคltรครค reitissรค vรคlitetyn aihetunnuksen. Liittรคminen $routeParams.topicId soveltamisalaan kuten $scope.tutorialid tekee sen saataville nรคkymรคssรค tutorialid-tunnuksena.

Kรคytรค parametreja AngularJS-reitiltรค

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Event Registration</title>
</head>
<body ng-app="sampleApp">

<script src="https://code.angularjs.org/1.8.3/angular.min.js"></script>
<script src="https://code.angularjs.org/1.8.3/angular-route.js"></script>

<h1> Guru99 Global Event</h1>
<table class="table table-striped">
<tbody>
<tr><td>1</td><td>Controllers</td>
<td><a href="#!/Angular/1">Topic details</a></td></tr>
<!-- rows 2 and 3 repeat with /Angular/2 and /Angular/3 -->
</tbody>
</table>
<div ng-view></div>

<script>
var sampleApp = angular.module('sampleApp', ['ngRoute']);

sampleApp.config(['$routeProvider',
function($routeProvider) {
  $routeProvider.
  when('/Angular/:topicId', {
    templateUrl: 'Angular.html',
    controller: 'AngularController'
  });
}]);

sampleApp.controller('AngularController', ['$scope', '$routeParams',
function($scope, $routeParams) {
  $scope.tutorialid = $routeParams.topicId;
}]);
</script>
</body>
</html>

โš ๏ธ Korjaukset tehty. Alkuperรคisessรค kรคytettiin kirjainta l numeron sijaan 1 in href="#Angular/l", jรคtti pois ng-view sรคilรถ, joten mallipohjalla ei ollut paikkaa renderรถidรค, ja se latautui angular-route.js ennen angular.min.js, joka heittรครค moduulivirheen.

Vaihe 4) Lisรครค lauseke muuttujan nรคyttรคmiseksi
Lisรครค lauseke nรคyttรครคksesi tutorialid-muuttujan Angular.html-sivulla.

Kรคytรค parametreja AngularJS-reitiltรค

<h2>Angular</h2>

<br><br>{{tutorialid}}

Jos koodi suoritetaan onnistuneesti, seuraava tuloste nรคkyy, kun suoritat koodisi selaimessa.

lรคhtรถ:

Kรคytรค parametreja AngularJS-reitiltรค

Tulostusnรคytรถssรค

  • Jos napsautat ensimmรคisen aiheen Aiheen tiedot -linkkiรค, numero 1 lisรคtรครคn siihen. URL.
  • Tuo numero otetaan โ€routeParamsโ€-argumenttina ja siitรค tulee kรคytettรคvissรค ohjaimessa.

Parametrin lukeminen on suoraviivaista. Seuraavaksi kรคsiteltรคvรคn ominaisuuden tehtรคvรคnรค on hakea parametrin tunnistama tietue ennen nรคkymรคn avautumista.

Datan esilataaminen resolve-ominaisuudella

Edellisessรค osiossa oleva ohjain lukee aiheen tunnuksen ja nรคyttรครค sen vรคlittรถmรคsti. Todellisten sovellusten on ensin noudettava tietue palvelimelta, ja jos nรคkymรค renderรถidรครคn ennen pyynnรถn palauttamista, kรคyttรคjรค nรคkee tyhjรคn mallineen, joka tรคyttyy hetkeรค myรถhemmin. resolve ominaisuus poistaa tuon tyhjรคn sisรคllรถn vรคlรคhdyksen.

Jokainen avain sisรคllรค resolve Objekti on riippuvuus, jonka AngularJS valmistelee ennen reitin aktivointia. Jos arvo on promise, reititin odottaa sen tรคyttymistรค. Vasta kun jokainen promise on ratkaistu, AngularJS luo ohjaimen instanssin ja renderรถi mallineen, ja ratkaistut arvot syรถtetรครคn ohjaimeen nimellรค, aivan kuten minkรค tahansa muun palvelun tapauksessa.

sampleApp.config(['$routeProvider',
function($routeProvider) {
  $routeProvider.
  when('/Angular/:topicId', {
    templateUrl: 'Angular.html',
    controller: 'AngularController',
    resolve: {
      // The router waits for this promise before rendering
      topic: ['$http', '$route', function($http, $route) {
        var id = $route.current.params.topicId;
        return $http.get('/api/topics/' + id).then(function(response) {
          return response.data;
        });
      }]
    }
  });
}]);

// 'topic' is injected already resolved, so no loading state is needed
sampleApp.controller('AngularController', ['$scope', 'topic',
function($scope, topic) {
  $scope.topic = topic;
}]);

Kaksi kรคyttรคytymistรค on tรคssรค tรคrkeรค. Hylรคtty lupaus peruu reitinmuutoksen ja jรคttรครค selaimen nykyiseen nรคkymรครคn, joten epรคonnistunut pyyntรถ ei koskaan tuota rikkinรคistรค sivua. Koska reititin kuitenkin estรครค lupauksen odottamisen, hidas pรครคtepiste saa sovelluksen nรคyttรคmรครคn jumiutuneelta. resolve edistymisindikaattorilla, jota ohjaa $routeChangeStart ja $routeChangeSuccess Tapahtumat.

โš ๏ธ Varoitus: ร„lรค koskaan aseta todennustarkistuksia vain sisรคlle resolveReitin hylkรครคminen piilottaa nรคkymรคn, mutta ei suojaa sen takana olevia tietoja, ja API-pรครคtepisteen on silti valvottava pรครคsyรค palvelimelle.

Datan esilataamisen lisรคksi reitti voi sisรคltรครค myรถs staattisia konfiguraatioarvoja. Seuraavaksi kuvataan, miten ohjain lukee ne.

Angular $route -palvelun kรคyttรคminen

$route-palvelun avulla voit kรคyttรครค reitin ominaisuuksia. $route-palvelu on kรคytettรคvissรค parametrina, kun funktio on mรครคritelty ohjaimessa. Yleinen syntaksi siitรค, miten $route-parametri on kรคytettรคvissรค ohjaimessa, on esitetty alla.

myApp.controller('MyController', function($scope, $route) { ... });
  1. myApp on sovelluksellesi mรครคritelty AngularJS-moduuli.
  2. MyController on sovelluksellesi mรครคritetyn ohjaimen nimi.
  3. Aivan kuten $scope vรคlittรครค tietoa ohjaimelta nรคkymรครคn, $route paljastaa nykyisen reitin ominaisuudet.

Katsotaanpa, miten voimme kรคyttรครค $route-palvelua.

Tรคssรค esimerkissรค

  • Aiomme luoda yksinkertaisen mukautetun muuttujan nimeltรค "mytext", joka sisรคltรครค merkkijonon "Tรคmรค on kulmikas".
  • Liitรคmme tรคmรคn muuttujan reittiimme. Later Aiomme kรคyttรครค tรคtรค merkkijonoa ohjaimestamme $route-palvelun avulla ja nรคyttรครค sen sitten scope-objektin avulla.

Katsotaanpa sitten vaiheet, jotka meidรคn on suoritettava saavuttaaksemme tรคmรคn.

Vaihe 1) Lisรครค mukautettu avain-arvo-pari reitille. Tรคssรค lisรครคmme avaimen nimeltรค "mytext" ja annamme sille arvon "Tรคmรค on kulmikas".

Kulmareittipalvelu

Vaihe 2) Lisรครค asiaankuuluva koodi ohjaimeen.

  1. Lisรครค $route-parametri ohjainfunktioon. $route-parametri on Angularissa mรครคritelty avainparametri, jonka avulla voi kรคyttรครค reitin ominaisuuksia.
  2. Reitillรค mรครคritettyรค "mytext"-muuttujaa pรครคsee kรคsiksi $route.current-viittauksen kautta. Tรคmรค mรครคritetรครคn sitten laajuusobjektin "teksti"-muuttujalle. Tekstimuuttujaa voidaan sitten kรคyttรครค nรคkymรคstรค vastaavasti.

Kulmareittipalvelu

// Only the config and controller change; the page markup is unchanged
sampleApp.config(['$routeProvider',
function($routeProvider) {
  $routeProvider.
  when('/Angular/:topicId', {
    mytext: "This is angular",   // custom key attached to the route
    templateUrl: 'Angular.html',
    controller: 'AngularController'
  });
}]);

sampleApp.controller('AngularController', ['$scope', '$routeParams', '$route',
function($scope, $routeParams, $route) {
  $scope.tutorialid = $routeParams.topicId;
  $scope.text = $route.current.mytext;
}]);

Vaihe 3) Lisรครค viittaus laajuusobjektin tekstimuuttujaan lausekkeena. Tรคmรค lisรคtรครคn Angular.html-sivullemme alla olevan kuvan mukaisesti.

Tรคmรค aiheuttaa tekstin "Tรคmรค on kulmikas" ruiskuttamisen nรคkymรครคn. Lauseke {{tutorialid}} on sama kuin edellisessรค aiheessa ja tรคmรค nรคyttรครค numeron '1'.

Kulmareittipalvelu

<h2>Angular</h2>

<br><br>{{text}}
<br><br>{{tutorialid}}

Jos koodi suoritetaan onnistuneesti, seuraava tuloste nรคkyy, kun suoritat koodisi selaimessa.

lรคhtรถ:

Kulmareittipalvelu

Ulostulosta,

  • Nรคemme, ettรค teksti "Tรคmรค on kulmikas" tulee nรคkyviin myรถs, kun napsautamme mitรค tahansa taulukon linkkiรค. Aihetunnus nรคkyy myรถs samaan aikaan tekstin kanssa.

Joka URL tรคhรคn mennessรค nรคytetyssรค muodossa on edelleen #-symboli. Viimeisessรค mรครคritysvaiheessa se poistetaan.

Otetaan kรคyttรถรถn HTML5-reititys

HTML5-reititystรค kรคytetรครคn puhtaiden tiedostojen luomiseen URLs. Se tarkoittaa hashtagin poistamista URLJoten reititys URLs, kun kรคytetรครคn HTML5-reititystรค, nรคyttรคisi alla olevalta.

Sample.html/Angular/1

Sample.html/Angular/2

Sample.html/Angular/3

Tรคmรค konsepti tunnetaan yleensรค kauniin esittelynรค URL kรคyttรคjรคlle.

HTML2-reitityksessรค on suoritettava kaksi pรครคvaihetta.

  1. Mรครคritetรครคn $locationProvider
  2. Perustamme suhteellisille linkeille

Katsotaanpa yksityiskohtaisesti, miten yllรค mainitut vaiheet suoritetaan esimerkissรคmme.

Vaihe 1) Lisรครค asiaankuuluva koodi Angular-moduuliin.

  1. Lisรครค <base> tagin dokumentin otsikkoon. Tรคmรค on pakollinen HTML5-reititykselle, jotta sovellus tietรครค sovelluksen perussijainnin.
  2. Lisรครค $locationProvider-palvelu. Tรคmรคn palvelun avulla voit mรครคrittรครค html5Mode-tilan.
  3. Aseta $locationProvider-palvelun html5Mode-asetukseksi tosi.

Otetaan kรคyttรถรถn HTML5-reititys

Vaihe 2) Poista kaikki linkkien #-tunnisteet ('Angular/1', 'Angular/2', 'Angular/3') luodaksesi helppolukuisen sisรคllรถn. URLs.

Otetaan kรคyttรถรถn HTML5-reititys

<!-- In the head: required by html5Mode so relative templates resolve -->
<base href="/">

<!-- In the body: the # is dropped from every link -->
<a href="Angular/1">Topic details</a>

<script>
sampleApp.config(['$routeProvider', '$locationProvider',
function($routeProvider, $locationProvider) {
  $locationProvider.html5Mode(true);
  $routeProvider.
  when('/Angular/:topicId', {
    templateUrl: 'Angular.html',
    controller: 'AngularController'
  });
}]);
</script>

โš ๏ธ korjaus: alkuperรคinen julisti a baseUrl vakio-osoitus paikalliseen IDE-polkuun, jolla ei ole vaikutusta html5Mode-tilaan. AngularJS lukee perussijainnin <base href> tag. Alkuperรคinen myรถs ruiskutti $locationProvider soittamatta kertaakaan html5Mode(true), joten tiivistettรค ei koskaan poistettu.

Jos koodi suoritetaan onnistuneesti, seuraava tuloste nรคkyy, kun suoritat koodisi selaimessa.

lรคhtรถ:

Otetaan kรคyttรถรถn HTML5-reititys

Ulostulosta,

  • Voit nรคhdรค, ettรค #-tunniste ei ole siellรค, kun kรคytรคt sovellusta.

Kaikki yllรค oleva kรคyttรครค ngRoutea, AngularJS-tiimin toimittamaa reititintรค. Se ei ole ainoa vaihtoehto, ja alla oleva vertailu selittรครค, milloin vaihtoehto on parempi.

ngRoute vs. ui-router: Kumman reitittimen valita

ngRoutea yllรคpitรครค AngularJS-tiimi, ja se vastaa URL suoraan yhteen mallipohjaan ja ohjaimeen. ui-router on yhteisรถprojekti, joka on rakennettu poistamaan ngRouten tรคrkein rajoitus: se vastaa sovelluksessa olivat sen sijaan, ettรค URL yksinรครคn, mikรค sallii yhden nรคytรถn sisรคltรคvรคn useita itsenรคisesti reititettyjรค alueita.

Aspect ngRoute ui-reititin
Konfiguraatiopalvelu $reitintarjoaja $osavaltiontarjoaja
Ottelut URL vain Nimetty osavaltio, URL valinnainen
Sisรคkkรคiset nรคkymรคt Ei tuettu Tuetut
Useita katselukertoja nรคyttรถรค kohden Yksi ng-nรคkymรค Monet nimetyt ui-view-pistorasiat
Sisรคkkรคinen ratkaisu Ei tuettu Lapsitilat perivรคt vanhemman ratkaisut
Soveltuu parhaiten Litteรคt, pienet sovellukset Kojelaudat ja kerrostetut asettelut

Valitse ngRoute, kun jokainen URL kartoitetaan yhdeksi koko sivun nรคkymรคksi, koska se ei tarvitse ylimรครคrรคistรค riippuvuutta ja koko API mahtuu yhdelle sivulle. Valitse ui-router, kun nรคytรถssรค on itsenรคisesti navigoitavia ruutuja tai kun alinรคkymien on kรคytettรคvรค uudelleen pรครคnรคkymรคn lataamaa dataa. Myรถhemmin siirtyminen on mahdollista, mutta ei yksinkertaista, koska tilojen nimet korvaavat URL kuvioita kaikissa malleissa.

Yleisiรค AngularJS-reititysvirheitรค ja niiden korjaaminen

Useimmat reititysvirheet aiheuttavat tyhjรคn ng-nรคkymรคn konsolivirheen sijaan, mikรค tekee niiden diagnosoinnista vaikeampaa kuin pitรคisi. Jokainen alla oleva oire nimeรครค syyn ja ratkaisun.

  • Tuntematon tarjoaja: $routeProvider: angular-route.js-tiedostoa ei koskaan ladattu tai se ladattiin ennen angular.min.js-tiedostoa. Katso ensin ydinkirjastoa.
  • Nรคkymรค pysyy tyhjรคnรค ilman virheitรค: Mikรครคn elementti ei kanna ng-view-direktiiviรค, joten mallineella ei ole paikkaa renderรถidรค.
  • Mikรครคn ei lataudu ensimmรคisellรค kรคynnillรค: Yksikรครคn reitti ei vastaa tyhjรครค polkua. Lisรครค muuten-lohko, jossa on redirectTo-arvo.
  • $routeParams on tyhjรค: Kuviosta puuttuu kaksoispisteen paikkamerkki. Sen on oltava muotoa '/Angular/:topicId'.
  • Mallit 404 html5Moden jรคlkeen: Mรครคritรค palvelin kirjoittamaan uudelleen yhteensopimattomat polut perussivulle ja varmista, ettรค perus-href-tagi on lรคsnรค.
  • Ohjain ei koskaan suorita uudelleen: vain parametri muuttui, joten AngularJS kรคytti ohjaininstanssia uudelleen sen uudelleenrakentamisen sijaan. Kuuntele $routeUpdate-tapahtumaa sen sijaan, ettรค luottaisit ohjainfunktion kรคynnistymiseen uudelleen.

UKK

$routeParams palauttaa sekรค polun paikkamerkit ettรค kyselymerkkijonon arvot yhdistettynรค yhdeksi objektiksi. $location.search() palauttaa vain kyselymerkkijonon. Kรคytรค $routeParams-arvoa kontrollereiden sisรคllรค ja $location.search()-arvoa luettaessa tai kirjoitettaessa kyselyarvoja suoraan.

Kyllรค. Ilman tiivistettรค selain lรคhettรครค koko polun palvelimelle pรคivityksen tai jaetun linkin yhteydessรค. Palvelimen on kirjoitettava jokainen tรคsmรครคmรคtรถn polku takaisin HTML-perussivulle, muuten syvรคlinkit palauttavat 404-virheen.

AngularJS:n elinkaari pรครคttyi joulukuussa 2021, eikรค sitรค enรครค pรคivitetรค. ngRoute soveltuu edelleen olemassa olevien AngularJS-sovellusten yllรคpitoon, mutta uusien projektien tulisi kรคyttรครค sen sijaan jotakin tรคllรค hetkellรค tuettua kehystรค.

Kyllรค. AI Assistantit yhdistรคvรคt jokaisen when-lohkon Routes-taulukon merkintรครคn ja kรครคntรคvรคt ratkaisuavaimet reitinratkaisijiksi. RevKatso suojaus- ja jokerimerkkien kรคsittely manuaalisesti, koska nรคmรค kaksi reititintรค kรคsittelevรคt yhteensopimattomia polkuja eri tavalla.

Tekoรคlytyรถkalut tarkistavat kolme yleisintรค syytรค jรคrjestyksessรค: puuttuva ngRoute-riippuvuus, puuttuva ng-view-elementti ja reittikuvio, joka ei vastaa URLOireen kuvaaminen ja mรครคrityslohkon liittรคminen yleensรค eristรครค vian.

Tiivistรค tรคmรค viesti seuraavasti: