AngularJs-ruting med parametere
โก Smart oppsummering
Ruting i AngularJS gjรธr en enkelt HTML-side om til en flervisningsapplikasjon via kartping URL fragmenter til maler og kontrollere. ngRoute-modulen og $routeProvider-tjenesten definerer disse kartenepings, mens ng-view-direktivet injiserer den samsvarende malen.

Fรธr vi ser pรฅ hvordan ruting fungerer i AngularJS, er det nyttig รฅ forstรฅ hva slags applikasjonsruting som ble bygget for. Avsnittet nedenfor setter denne konteksten, og hver teknikk som fรธlger bygger pรฅ den.
Hva er enkeltsideapplikasjoner?
Enkeltsideapplikasjoner, eller SPA-er, er webapplikasjoner som laster inn รฉn HTML-side og deretter oppdaterer siden dynamisk nรฅr brukeren samhandler med den. I stedet for รฅ be om et nytt dokument fra serveren for hvert klikk, bytter en SPA bare ut den delen av siden som endret seg.
Den utformingen skaper ett problem. Hvis nettleseren aldri navigerer til et nytt dokument, endres aldri adressefeltet, slik at brukeren ikke kan bokmerke en skjerm, dele den eller bruke tilbakeknappen. Ruting lรธser nettopp dette problemet.
Hva er ruting i AngularJS?
Ruting i AngularJS er en metode som lar deg lage applikasjoner med รฉn side. Den lar deg lage forskjellige URLs for ulikt innhold i webapplikasjonene dine. AngularJS-ruting hjelper ogsรฅ med รฅ vise flere innholdstyper avhengig av hvilken rute som velges. Det er spesifisert i URL etter #-tegnet.
La oss ta et eksempel pรฅ et nettsted som hostes via URL http://example.com/index.html.
Denne siden er hovedskjermen til applikasjonen din. La oss si at applikasjonen organiserer en hendelse, og brukeren รธnsker รฅ liste opp hendelsene, se en i detalj eller slette en. I en applikasjon med รฉn side og ruting aktivert er alt dette tilgjengelig via fรธlgende lenker.
Symbolet # vil bli brukt sammen med de forskjellige rutene (ShowEvent, DisplayEvent og DeleteEvent).
- For รฅ se alle hendelser, blir brukeren henvist til http://example.com/index.html#ShowEvent
- For รฅ se รฉn bestemt hendelse, blir de henvist til http://example.com/index.html#DisplayEvent
- For รฅ slette en hendelse, blir de henvist til http://example.com/index.html#DeleteEvent
Merk at hoveddelen URL forblir den samme. Bare fragmentet etter # endres, og det er det AngularJS ser pรฅ. Med konseptet etablert, dekker neste avsnitt delene du mรฅ koble til fรธr noe av det fungerer.
Legger til AngularJS Route ved รฅ bruke $routeProvider
Som diskutert tidligere, ruter i AngularJS brukes til รฅ rute brukeren til en annen visning av applikasjonen din. Denne rutingen gjรธres pรฅ samme HTML-side, slik at brukeren opplever at de ikke har forlatt siden.
For รฅ implementere ruting mรฅ fรธlgende hovedtrinn implementeres i applikasjonen din i en spesifikk rekkefรธlge.
- Referanse angular-route.js. Dette JavaScript fil, utviklet av Google, inneholder all rutingsfunksjonalitet og mรฅ inkluderes slik at applikasjonen kan referere til modulenes rutingsbehov.
- Legg til en avhengighet til ngRoute-modulen fra applikasjonen din. Uten denne avhengigheten kan ikke ruting brukes i AngularJS-applikasjonen i det hele tatt.
Nedenfor er den generelle syntaksen til denne uttalelsen. Dette er bare en normal erklรฆring av en modul med inkludering av nรธkkelordet ngRoute.
var module = angular.module("sampleApp", ['ngRoute']);
- Konfigurer din $routeProvider. Denne gir de ulike rutene i applikasjonen din, og syntaksen sier ganske enkelt at nรฅr den relevante banen er valgt, bruk ruten til รฅ vise den gitte visningen.
when(path, route)
- Lenker til ruten din fra HTML-siden din. Pรฅ HTML-siden din vil du legge til referanselenker til de forskjellige tilgjengelige rutene i applikasjonen din.
<a href="#!/route1">Route 1</a><br/>
- Til slutt ville vรฆre inkludering av ng-view-direktivet, som normalt vil vรฆre i en div-tag. Dette vil bli brukt til รฅ injisere innholdet i visningen nรฅr den relevante ruten er valgt.
๐ Tips: Alle fem trinnene er obligatoriske. En manglende angular-route.js-referanse er den vanligste grunnen til at en rute ikke gjรธr noe i stillhet, fordi $routeProvider ikke eksisterer uten den. Neste avsnitt setter alle fem sammen i et fungerende eksempel.
Eksempel pรฅ AngularJS-ruting
La oss nรฅ se pรฅ et eksempel pรฅ ruting ved รฅ bruke de ovennevnte trinnene.
I vรฅrt AngularJS-rutingseksempel med parametere,
- En lenke er for รฅ vise emnene for en AngularJS selvfรธlgelig, og den andre er for node.js kurs.
- Nรฅr brukeren klikker pรฅ en av koblingene, vil emnene for kurset vises.
Trinn 1) Ta med angular-rute-filen som en skriptreferanse.
Denne rutefilen er nรธdvendig for รฅ kunne bruke funksjonaliteten ved รฅ ha flere ruter og visninger. Denne filen kan lastes ned fra AngularJS-nettstedet.
Trinn 2) Legg til href-tagger som vil representere lenker til "Angular JS Topics" og "Node JS Topics."
Trinn 3) Legg til en div-tag med ng-view-direktivet som vil representere visningen.
Dette vil tillate at den tilsvarende visningen injiseres hver gang brukeren klikker pรฅ enten "Angular JS Topics" eller "Node JS Topics."
Trinn 4) I skriptkoden for AngularJS legger du til "ngRoute-modulen" og "$routeProvider"-tjenesten.
Code Forklaring:
- Inkluder ยซngRoute-modulenยป. Med denne pรฅ plass hรฅndterer Angular ruting automatisk og forstรฅr alle rutingskommandoene.
- $routeProvider er en tjeneste som lytter i bakgrunnen til rutene som kalles. Nรฅr brukeren klikker pรฅ en lenke, oppdager den dette og bestemmer hvilken rute den skal ta.
- Opprett รฉn rute for Angular-lenken: nรฅr den klikkes, injiser Angular.html og bruk 'AngularController' for forretningslogikken.
- Opprett รฉn rute for Node-lenken, som injiserer Node.html og bruker 'NodeController' pรฅ samme mรฅte.
Trinn 5) Neste er รฅ legge til kontrollere for รฅ behandle forretningslogikken for bรฅde AngularController og NodeController.
I hver kontroller oppretter vi en matrise med nรธkkelverdipar for รฅ lagre emnenavn og beskrivelser for hvert kurs. Matrisevariabelen ยซtutorialยป legges til omfangsobjektet for hver kontroller.
<!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>
โ ๏ธ Rettelser er iverksatt. Ocuco <title> merkelappen satt inni <body>, chrset="UTF 8" var feilstavet, den andre lenken pekte pรฅ #Node.html i stedet for den registrerte ruten /Node, og malbanene hadde en innledende skrรฅstrek som lรธses fra domeneroten.
Trinn 6) Lag sider kalt Angular.html og Node.html. For hver side utfรธrer vi trinnene nedenfor.
Disse trinnene vil sikre at alle nรธkkelverdi-parene i matrisen vises pรฅ hver side.
- Bruke ng-gjenta direktiv for รฅ gรฅ gjennom hvert nรธkkel-verdi-par som er definert i veiledningsvariabelen.
- Viser navn og beskrivelse av hvert nรธkkelverdi-par.
- Angular.html
<h2>Angular</h2> <ul ng-repeat="ptutor in tutorial"> <li>Course : {{ptutor.Name}} - {{ptutor.Description}}</li> </ul>
- Node.html โ identisk med listen ovenfor, med overskriften endret til ยซNodeยป. Begge malene har samme lesemรฅte.
tutorialvariabel, som hver kontroller leverer fra sitt eget omfang.
โ ๏ธ Korreksjon: Overskriften i den originale Angular.html-filen var ยซAngulerยป. Stavemรฅten er korrigert ovenfor.
Hvis koden kjรธres uten problemer, vil fรธlgende utdata vises nรฅr du kjรธrer koden i nettleseren.
Utgang:
Hvis du klikker pรฅ lenken AngularJS Topics, vil resultatet nedenfor vises.
Utgangen viser tydelig at
- Nรฅr koblingen "Angular JS Topics" klikkes, bestemmer ruteleverandรธren som vi deklarerte i koden vรฅr at Angular.html-koden skal injiseres.
- Denne koden vil bli injisert i "div"-taggen, som inneholder ng-view-direktivet. Innholdet i kursbeskrivelsen kommer ogsรฅ fra "veiledningsvariabelen" som var en del av scope-objektet definert i AngularController.
- Nรฅr man klikker pรฅ node.js Emner, det samme resultatet vil finne sted, og visningen for Node.js-emner vil bli manifestert.
- Legg ogsรฅ merke til at siden URL forblir den samme. Det er bare ruten etter #-taggen som endres, og dette er konseptet med enkeltsideapplikasjoner. #hash-taggen i URL er et skilletegn mellom ruten (som i vรฅrt tilfelle er ยซAngularยป) og den primรฆre HTML-siden (Sample.html).
Eksemplet fungerer bare mens brukeren klikker pรฅ en lenke som samsvarer med en registrert rute. Neste avsnitt tar for seg hva som skal skje nรฅr ingenting samsvarer.
Opprette en standardrute i AngularJS
Ruting i AngularJS gir ogsรฅ muligheten til รฅ ha en standardrute. Dette er ruten som velges hvis det ikke er samsvar for den eksisterende ruten.
Standardruten opprettes ved รฅ legge til fรธlgende betingelse nรฅr du definerer $routeProvider-tjenesten.
Syntaksen nedenfor betyr ganske enkelt รฅ omdirigere til en annen side hvis noen av de eksisterende rutene ikke samsvarer.
otherwise({
redirectTo: 'page'
});
La oss bruke samme eksempel ovenfor og legge til en standardrute til vรฅr $routeProvider-tjeneste.
sampleApp.config(['$routeProvider', function($routeProvider) { $routeProvider. when('/Angular', { templateUrl: 'Angular.html', controller: 'AngularController' }). when('/Node', { templateUrl: 'Node.html', controller: 'NodeController' }). otherwise({ redirectTo: '/Angular' }); }]);
Code Forklaring:
- Her bruker vi samme kode som ovenfor, med den eneste forskjellen at vi bruker otherwise-setningen og alternativet ยซredirectToยป for รฅ spesifisere hvilken visning som skal lastes inn hvis ingen rute er spesifisert. I vรฅrt tilfelle รธnsker vi at '/Angular'-visningen skal vises.
Hvis koden kjรธres uten problemer, vil fรธlgende utdata vises nรฅr du kjรธrer koden i nettleseren.
Utgang:
Fra utgangen,
- Du kan tydelig se at standardvisningen som vises er AngularJS-visningen.
- Dette er fordi nรฅr siden lastes, gรฅr den til alternativet 'ellers' i $routeProvider-funksjonen og laster '/Angular'-visningen.
En standardrute bestemmer hvilken visning som lastes inn. Neste avsnitt dekker hvordan en enkelt rute kan betjene mange poster ved รฅ ha en verdi i URL.
Hvordan fรฅ tilgang til parametere fra AngularJS-ruten
Angular tilbyr ogsรฅ funksjonalitet for รฅ sende parametere under ruting. Parameterne legges til pรฅ slutten av ruten i URL, For eksempel, http://guru99/index.html#/Angular/1. I dette Angular routing-eksemplet,
- http://guru99/index.html er vรฅr hovedapplikasjon URL
- #-tegnet er skillet mellom hovedapplikasjonen URL og ruten
- Kantet er vรฅr rute
- Og til slutt er '1' parameteren som legges til ruten vรฅr
Den generelle syntaksen er HTMLPage#/rute/parameter, sรฅ de tidligere emnene blir Sample.html#/Angular/1, #/Angular/2 og #/Angular/3, hvor sifferet er emne-ID-en.
La oss se nรฆrmere pรฅ hvordan vi kan implementere en Angular-rute med en parameter.
Trinn 1) Legg til fรธlgende kode i visningen
- Legg til en tabell for รฅ vise alle emnene for Angular JS-kurset til brukeren.
- Legg til en tabellrad for รฅ vise emnet ยซKontrollereยป. For denne raden setter du href til ยซ#!/Angular/1ยป, slik at nรฅr du klikker pรฅ emnet, sendes parameter 1 i URL sammen med ruten.
- Legg til en rad for emnet ยซModellerยป, med href satt til ยซ#!/Angular/2ยป slik at parameter 2 beveger seg i URL.
- Legg til en rad for emnet ยซDirektiverยป, med href satt til ยซ#!/Angular/3ยป slik at parameter 3 beveger seg i URL.
Trinn 2) Legg til emne-ID i routeProvider-tjenestefunksjonen
I routeProvider-tjenestefunksjonen legger du til :topicId plassholder for รฅ angi at enhver parameter som sendes i URL etter at ruten skal tilordnes variabelen topicId.
Trinn 3) Legg til den nรธdvendige koden til kontrolleren
- Sรธrg for รฅ fรธrst legge til ยซ$routeParamsยป som en parameter nรฅr du definerer kontrollerfunksjonen. Denne parameteren vil ha tilgang til alle ruteparametrene som sendes i URL.
- ยซ$routeParamsยป inneholder emne-ID-en som er sendt i ruten. Vedlegger
$routeParams.topicIdtil omfanget som$scope.tutorialidgjรธr den tilgjengelig for visningen som tutorialid.
<!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>
โ ๏ธ Rettelser er iverksatt. Originalen brukte bokstaven l i stedet for sifferet 1 in href="#Angular/l", utelatt ng-view beholderen slik at malen ikke hadde noe sted รฅ gjengi, og lastet inn angular-route.js fรธr du angular.min.js, som kaster en modulfeil.
Trinn 4) Legg til uttrykket for รฅ vise variabelen
Legg til uttrykket for รฅ vise tutorialid-variabelen pรฅ Angular.html-siden.
<h2>Angular</h2> <br><br>{{tutorialid}}
Hvis koden kjรธres uten problemer, vil fรธlgende utdata vises nรฅr du kjรธrer koden i nettleseren.
Utgang:
I utdataskjermen,
- Hvis du klikker pรฅ lenken Emnedetaljer for det fรธrste emnet, legges tallet 1 til. URL.
- Det tallet tas som et ยซrouteParamsยป-argument og blir tilgjengelig i kontrolleren.
Det er enkelt รฅ lese en parameter. Det er egenskapens jobb som dekkes videre รฅ hente posten som parameteren identifiserer, fรธr visningen vises.
Slik forhรฅndslaster du data med resolve-egenskapen
Kontrolleren i forrige avsnitt leser en emne-ID og viser den umiddelbart. Ekte applikasjoner mรฅ fรธrst hente posten fra en server, og hvis visningen gjengis fรธr forespรธrselen returneres, ser brukeren en tom mal som fylles ut et รธyeblikk senere. resolve egenskapen fjerner det glimtet av tomt innhold.
Hver nรธkkel inni en resolve objektet er en avhengighet som AngularJS forbereder fรธr ruten aktiveres. Hvis verdien er et lรธfte, venter ruteren pรฅ at det skal lรธses. Fรธrst nรฅr hvert lรธfte er lรธst, instansierer AngularJS kontrolleren og gjengir malen, og de lรธste verdiene injiseres i kontrolleren etter navn, akkurat som enhver annen tjeneste.
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; }]);
To virkemรฅter er viktige her. Et avvist lรธfte avbryter ruteendringen og lar nettleseren stรฅ i gjeldende visning, slik at en mislykket forespรธrsel aldri produserer en รธdelagt side. Men fordi ruteren blokkerer mens lรธftet venter, fรฅr et tregt endepunkt applikasjonen til รฅ virke frossen. resolve med en fremdriftsindikator drevet av $routeChangeStart og $routeChangeSuccess arrangementer.
โ ๏ธ Advarsel: Plasser aldri autentiseringskontroller bare inni resolveร
avvise en rute skjuler en visning, men beskytter ikke dataene bak den, og API-endepunktet mรฅ fortsatt hรฅndheve tilgang pรฅ serveren.
Utover forhรฅndslasting av data, kan en rute ogsรฅ inneholde statiske konfigurasjonsverdier. Tjenesten som beskrives nedenfor er hvordan en kontroller leser dem.
Slik bruker du Angular $route-tjenesten
Tjenesten $route gir deg tilgang til egenskapene til ruten. Tjenesten $route er tilgjengelig som en parameter nรฅr funksjonen er definert i kontrolleren. Den generelle syntaksen for hvordan $route-parameteren gjรธres tilgjengelig fra kontrolleren vises nedenfor.
myApp.controller('MyController', function($scope, $route) { ... });
- myApp er AngularJS-modulen som er definert for applikasjonen din.
- MyController er navnet pรฅ kontrolleren som er definert for applikasjonen din.
- Akkurat som $scope sender informasjon fra kontrolleren til viewet, eksponerer $route egenskapene til gjeldende rute.
La oss se pรฅ hvordan vi kan bruke $route-tjenesten.
I dette eksemplet,
- Vi skal lage en enkel tilpasset variabel kalt "mytext", som vil inneholde strengen "This is angular."
- Vi skal legge til denne variabelen i ruten vรฅr. Later Vi skal fรฅ tilgang til denne strengen fra kontrolleren vรฅr ved hjelp av $route-tjenesten, og deretter bruke scope-objektet til รฅ vise den i visningen vรฅr.
Sรฅ la oss se trinnene vi mรฅ utfรธre for รฅ oppnรฅ dette.
Trinn 1) Legg til et egendefinert nรธkkelverdi-par til ruten. Her legger vi til en nรธkkel kalt "min tekst" og tildeler den verdien "Dette er kantet."
Trinn 2) Legg til den relevante koden i kontrolleren.
- Legg til $route-parameteren i kontrollerfunksjonen. $route-parameteren er en nรธkkelparameter definert i Angular, som gir tilgang til egenskapene til ruten.
- Variabelen "mytext" som ble definert i ruten kan nรฅs via $route.current-referansen. Dette tilordnes deretter 'tekst'-variabelen til scope-objektet. Tekstvariabelen kan deretter nรฅs fra visningen tilsvarende.
// 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; }]);
Trinn 3) Legg til en referanse til tekstvariabelen fra scope-objektet som et uttrykk. Dette vil bli lagt til vรฅr Angular.html-side som vist nedenfor.
Dette vil fรธre til at teksten "This is angular" sprรธytes inn i visningen. {{tutorialid}}-uttrykket er det samme som det som ble sett i forrige emne, og dette vil vise tallet '1'.
<h2>Angular</h2> <br><br>{{text}} <br><br>{{tutorialid}}
Hvis koden kjรธres uten problemer, vil fรธlgende utdata vises nรฅr du kjรธrer koden i nettleseren.
Utgang:
Fra utgangen,
- Vi kan se at teksten "This is angular" ogsรฅ vises nรฅr vi klikker pรฅ noen av lenkene i tabellen. Emne-ID-en vises ogsรฅ samtidig med teksten.
Hver URL vist sรฅ langt har fortsatt et #-symbol. Det siste konfigurasjonstrinnet fjerner det.
Aktiverer HTML5-ruting
HTML5-ruting brukes til รฅ lage rene URLs. Det betyr at emneknaggen fjernes fra URLSรฅ rutingen URLs, nรฅr HTML5-ruting brukes, vil se ut som vist nedenfor.
Sample.html/Angular/1
Sample.html/Angular/2
Sample.html/Angular/3
Dette konseptet er vanligvis kjent som รฅ presentere en pen URL til brukeren.
Det er 2 hovedtrinn som mรฅ utfรธres for HTML5-ruting.
- Konfigurerer $locationProvider
- Setter vรฅr base for relative koblinger
La oss se nรฆrmere pรฅ hvordan du utfรธrer trinnene nevnt ovenfor i eksemplet vรฅrt.
Trinn 1) Legg til relevant kode i Angular-modulen.
- legge en
<base>taggen til dokumenthodet. Dette er nรธdvendig for HTML5-ruting, slik at applikasjonen vet hva applikasjonens baseplassering er. - Legg til tjenesten $locationProvider. Denne tjenesten lar deg definere html5Mode.
- Sett html5Mode for $locationProvider-tjenesten til true.
Trinn 2) Fjern alle #-taggene for lenkene ('Angular/1', 'Angular/2', 'Angular/3') for รฅ lage lettleste URLs.
<!-- 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>
โ ๏ธ Korreksjon: originalen erklรฆrte en baseUrl konstant peking pรฅ en lokal IDE-sti, som ikke har noen effekt pรฅ html5Mode. AngularJS leser basisplasseringen fra <base href> taggen. Originalen ble ogsรฅ injisert $locationProvider uten รฅ noen gang ringe html5Mode(true), sรฅ hashen ble aldri fjernet.
Hvis koden kjรธres uten problemer, vil fรธlgende utdata vises nรฅr du kjรธrer koden i nettleseren.
Utgang:
Fra utgangen,
- Du kan se at #-taggen ikke er der nรฅr du รฅpner applikasjonen.
Alt ovenfor bruker ngRoute, ruteren levert av AngularJS-teamet. Det er ikke det eneste alternativet, og sammenligningen nedenfor forklarer nรฅr alternativet passer bedre.
ngRoute vs. ui-router: Hvilken ruter du skal velge
ngRoute vedlikeholdes av AngularJS-teamet og samsvarer med en URL direkte til en enkelt mal og kontroller. ui-router er et fellesskapsprosjekt bygget for รฅ fjerne ngRoutes hovedbegrensning: den matcher pรฅ applikasjonen stat snarere enn pรฅ URL alene, noe som gjรธr at รฉn skjerm kan inneholde flere uavhengig rutede regioner.
| Aspekt | ngRoute | ui-ruter |
|---|---|---|
| Konfigurasjonstjeneste | $ruteleverandรธr | $stateProvider |
| Kamper pรฅ | URL bare | Navngitt stat, URL valgfritt |
| Nestede visninger | Stรธttes ikke | Stรธttes |
| Flere visninger per skjerm | รn ng-visning | Mange navngitte ui-view-utsalgssteder |
| Nestet lรธsning | Stรธttes ikke | Barnetilstander arver foreldrelรธsninger |
| Passer best til | Flate, smรฅ applikasjoner | Dashbord og lagdelte oppsett |
Velg ngRoute nรฅr hver URL kartlegges til รฉn helsidesvisning, siden den ikke trenger noen ekstra avhengighet og hele API-et fรฅr plass pรฅ รฉn enkelt side. Velg ui-router nรฅr en skjerm har ruter som navigerer uavhengig, eller nรฅr undervisninger mรฅ gjenbruke data lastet inn av en overordnet visning. Migrering senere er mulig, men ikke trivielt, fordi tilstandsnavn erstatter URL mรธnstre gjennom hele malene.
Vanlige AngularJS-rutingsfeil og hvordan du fikser dem
De fleste rutingsfeil produserer en blank ng-visning i stedet for en konsollfeil, noe som gjรธr dem vanskeligere รฅ diagnostisere enn de burde vรฆre. Hvert symptom nedenfor angir รฅrsaken og lรธsningen.
- Ukjent leverandรธr: $routeProvider: angular-route.js ble aldri lastet inn, eller lastet inn fรธr angular.min.js. Se fรธrst pรฅ kjernebiblioteket.
- Visningen forblir tom uten feil: ingen elementer bรฆrer ng-view-direktivet, sรฅ malen har ingen steder รฅ gjengis.
- Ingenting lastes inn ved fรธrste besรธk: Ingen rute samsvarer med den tomme banen. Legg til en ellers-blokk med en redirectTo-verdi.
- $ruteParams er tom: Mรธnsteret mangler kolonplassholderen sin. Det mรฅ stรฅ '/Angular/:topicId'.
- Maler 404 etter html5Mode: konfigurer serveren til รฅ omskrive umatchede stier til basissiden, og bekreft at base href-taggen er til stede.
- Kontrolleren kjรธrer aldri pรฅ nytt: Bare parameteren ble endret, sรฅ AngularJS brukte kontrollerinstansen pรฅ nytt i stedet for รฅ gjenoppbygge den. Lytt etter $routeUpdate-hendelsen i stedet for รฅ stole pรฅ at kontrollerfunksjonen utlรธses pรฅ nytt.
























