AngularJs usmjeravanje s parametrima
โก Pametni saลพetak
Rutiranje u AngularJS-u pretvara jednu HTML stranicu u aplikaciju s viลกe prikaza pomoฤu mapeping URL fragmente u predloลกke i kontrolere. Modul ngRoute i usluga $routeProvider definiraju ove mapepings, dok direktiva ng-view ubrizgava odgovarajuฤi predloลพak.

Prije nego ลกto pogledamo kako usmjeravanje funkcionira u AngularJS-u, korisno je razumjeti za koju je vrstu usmjeravanja aplikacije izgraฤeno. Odjeljak u nastavku postavlja taj kontekst, a svaka tehnika koja slijedi nadograฤuje se na njega.
ล to su jednostrane aplikacije?
Aplikacije s jednom stranicom ili SPA-ovi su web aplikacije koje uฤitavaju jednu HTML stranicu, a zatim je dinamiฤki aลพuriraju dok korisnik komunicira s njom. Umjesto da od posluลพitelja traลพi novi dokument za svaki klik, SPA zamjenjuje samo dio stranice koji se promijenio.
Taj dizajn stvara jedan problem. Ako preglednik nikada ne otvori novi dokument, adresna traka se nikada ne mijenja, pa korisnik ne moลพe oznaฤiti zaslon, podijeliti ga ili koristiti gumb za povratak. Usmjeravanje rjeลกava upravo taj problem.
ล to je rutiranje u AngularJS?
Usmjeravanje u AngularJS je metoda koja vam omoguฤuje izradu jednostraniฤnih aplikacija. Omoguฤuje vam stvaranje razliฤitih URLza razliฤit sadrลพaj u vaลกim web aplikacijama. AngularJS usmjeravanje takoฤer pomaลพe u prikazivanju viลกe sadrลพaja ovisno o odabranoj ruti. To je navedeno u URL nakon znaka #.
Uzmimo primjer web-mjesta koje je hostirano putem URL http://example.com/index.html.
Ova stranica sadrลพi glavni zaslon vaลกe aplikacije. Pretpostavimo da aplikacija organizira dogaฤaj i da korisnik ลพeli popisati dogaฤaje, detaljno pregledati jedan ili izbrisati jedan. U aplikaciji s jednom stranicom s omoguฤenim usmjeravanjem, sve je to dostupno putem sljedeฤih poveznica.
Simbol # bi se koristio zajedno s razliฤitim rutama (ShowEvent, DisplayEvent i DeleteEvent).
- Za pregled svih dogaฤaja, korisnik se upuฤuje na http://example.com/index.html#ShowEvent
- Da bi vidjeli jedan odreฤeni dogaฤaj, upuฤeni su na http://example.com/index.html#DisplayEvent
- Za brisanje dogaฤaja, upuฤeni su na http://example.com/index.html#DeleteEvent
Imajte na umu da glavni URL ostaje isti. Mijenja se samo fragment nakon znaka #, a taj fragment AngularJS prati. Nakon ลกto je koncept uspostavljen, sljedeฤi odjeljak pokriva dijelove koje morate povezati prije nego ลกto iลกta od toga radi.
Dodavanje AngularJS rute pomoฤu $routeProvider
Kao ลกto je ranije spomenuto, rute u AngularJS koriste se za usmjeravanje korisnika na drugi prikaz vaลกe aplikacije. Ovo usmjeravanje se vrลกi na istoj HTML stranici, tako da korisnik ima dojam da nije napustio stranicu.
Za implementaciju usmjeravanja, sljedeฤi glavni koraci moraju biti implementirani u vaลกoj aplikaciji bilo kojim odreฤenim redoslijedom.
- Referenca angular-route.js. Ovo JavaScript datoteka, razvijena od strane Google, sadrลพi sve funkcionalnosti usmjeravanja i mora biti ukljuฤen kako bi aplikacija mogla referencirati potrebe usmjeravanja modula.
- Dodajte ovisnost modulu ngRoute unutar vaลกe aplikacije. Bez ove ovisnosti, usmjeravanje se uopฤe ne moลพe koristiti u AngularJS aplikaciji.
Ispod je opฤa sintaksa ove izjave. Ovo je samo normalna deklaracija modula s ukljuฤivanjem kljuฤne rijeฤi ngRoute.
var module = angular.module("sampleApp", ['ngRoute']);
- Konfigurirajte svoj $routeProvider. To pruลพa razliฤite rute u vaลกoj aplikaciji, a sintaksa jednostavno navodi da kada se odabere relevantna putanja, koristite rutu za prikaz zadanog prikaza.
when(path, route)
- Veze na vaลกu rutu unutar vaลกe HTML stranice. Na svoju HTML stranicu ฤete dodati referentne veze na razliฤite dostupne rute u vaลกoj aplikaciji.
<a href="#!/route1">Route 1</a><br/>
- Konaฤno bi bilo ukljuฤivanje ng-view direktiva, koji bi inaฤe bio u oznaci div. Ovo bi se koristilo za ubacivanje sadrลพaja pogleda kada se odabere relevantna ruta.
๐ก Savjet: Svih pet koraka je obavezno. Nedostajuฤa referenca angular-route.js najฤeลกฤi je razlog zaลกto ruta tiho ne radi niลกta, jer $routeProvider ne postoji bez nje. Sljedeฤi odjeljak objedinjuje svih pet koraka u radnom primjeru.
Primjer AngularJS usmjeravanja
Sada pogledajmo primjer usmjeravanja pomoฤu gore navedenih koraka.
U naลกem primjeru AngularJS usmjeravanja s parametrima,
- Jedna poveznica sluลพi za prikaz tema za AngularJS naravno, a drugi je za Node.js teฤaj.
- Kada korisnik klikne bilo koju vezu, prikazat ฤe se teme za taj teฤaj.
Korak 1) Ukljuฤite datoteku kutne rute kao referencu skripte.
Ova datoteka rute je potrebna kako bi se iskoristile funkcionalnosti viลกe ruta i prikaza. Ovu datoteku moลพete preuzeti s AngularJS web stranice.
Korak 2) Dodajte href oznake koje ฤe predstavljati poveznice na โAngular JS temeโ i โNode JS teme.โ
Korak 3) Dodajte oznaku div s direktivom ng-view koja ฤe predstavljati prikaz.
To ฤe omoguฤiti umetanje odgovarajuฤeg pogleda kad god korisnik klikne bilo na โAngular JS temeโ ili โNode JS temeโ.
Korak 4) U svoju oznaku skripte za AngularJS dodajte โngRoute moduleโ i โ$routeProviderโ uslugu.
Code Objaลกnjenje:
- Ukljuฤite modul โngRouteโ. S ovim na mjestu, Angular automatski obraฤuje usmjeravanje i razumije sve naredbe usmjeravanja.
- $routeProvider je usluga koja u pozadini osluลกkuje pozivane rute. Kada korisnik klikne na poveznicu, usluga to detektira i odluฤuje kojom ฤe rutom iฤi.
- Napravite jednu rutu za Angular poveznicu: kada se klikne na nju, ubrizgajte Angular.html i koristite 'AngularController' za poslovnu logiku.
- Napravite jednu rutu za Node link, koja ubrizgava Node.html i koristi 'NodeController' na isti naฤin.
Korak 5) Sljedeฤe je dodavanje kontrolera za obradu poslovne logike za AngularController i NodeController.
U svakom kontroleru stvaramo niz parova kljuฤ-vrijednost za pohranjivanje naziva tema i opisa za svaki teฤaj. Varijabla niza 'tutorial' dodaje se objektu opsega za svaki kontroler.
<!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>
โ ๏ธ Primijenjene su ispravke. The <title> oznaka je bila unutra <body>, chrset="UTF 8" je krivo napisano, druga poveznica je vodila na #Node.html umjesto registrirane rute /Node, a putanje predloลพaka imale su poฤetnu kosu crtu koja se rjeลกava iz korijena domene.
Korak 6) Napravite stranice pod nazivom Angular.html i Node.html. Za svaku stranicu provodimo korake u nastavku.
Ovi koraci ฤe osigurati da se svi parovi kljuฤ-vrijednost niza prikazuju na svakoj stranici.
- Koriลกtenje ng-repeat direktiva proฤi kroz svaki par kljuฤ-vrijednost definiran u varijabli tutoriala.
- Prikaz naziva i opisa svakog para kljuฤ-vrijednost.
- Angular.html
<h2>Angular</h2> <ul ng-repeat="ptutor in tutorial"> <li>Course : {{ptutor.Name}} - {{ptutor.Description}}</li> </ul>
- ฤvor.html โ identiฤno gornjem popisu, s promijenjenim naslovom u โฤvorโ. Oba predloลกka imaju isti sadrลพaj
tutorialvarijabla koju svaki kontroler opskrbljuje iz vlastitog opsega.
โ ๏ธ Ispravak: Naslov u originalnoj datoteci Angular.html glasio je โAngulerโ. Pravopis je ispravljen gore.
Ako je kod uspjeลกno izvrลกen, sljedeฤi izlaz ฤe se prikazati kada pokrenete kod u pregledniku.
Izlaz:
Ako kliknete na poveznicu AngularJS Topics, prikazat ฤe se donji ispis.
Izlaz jasno pokazuje da,
- Kada se klikne poveznica โAngular JS Topicsโ, routeProvider koji smo deklarirali u naลกem kodu odluฤuje da treba ubaciti Angular.html kod.
- Ovaj ฤe kod biti umetnut u oznaku "div", koja sadrลพi direktivu ng-view. Takoฤer, sadrลพaj za opis teฤaja dolazi iz "varijable tutorijala" koja je bila dio objekta opsega definiranog u AngularControlleru.
- Kada se klikne na Node.js Teme, dogodit ฤe se isti rezultat i prikazat ฤe se prikaz za teme Node.js.
- Takoฤer, primijetite da stranica URL ostaje isti. Mijenja se samo ruta nakon oznake #, a to je koncept aplikacija s jednom stranicom. Oznaka #hash u URL je separator izmeฤu rute (koja je u naลกem sluฤaju 'Angular') i glavne HTML stranice (Sample.html).
Primjer radi samo dok korisnik klikne na vezu koja odgovara registriranoj ruti. Sljedeฤi odjeljak obraฤuje ลกto bi se trebalo dogoditi kada se niลกta ne podudara.
Stvaranje zadane rute u AngularJS
Usmjeravanje u AngularJS-u takoฤer pruลพa moguฤnost zadane rute. Ovo je ruta koja se bira ako nema podudaranja s postojeฤom rutom.
Zadana ruta stvara se dodavanjem sljedeฤeg uvjeta prilikom definiranja usluge $routeProvider.
Donja sintaksa jednostavno znaฤi preusmjeravanje na drugu stranicu ako se bilo koja od postojeฤih ruta ne podudara.
otherwise({
redirectTo: 'page'
});
Iskoristimo isti gornji primjer i dodajmo zadanu rutu naลกoj usluzi $routeProvider.
sampleApp.config(['$routeProvider', function($routeProvider) { $routeProvider. when('/Angular', { templateUrl: 'Angular.html', controller: 'AngularController' }). when('/Node', { templateUrl: 'Node.html', controller: 'NodeController' }). otherwise({ redirectTo: '/Angular' }); }]);
Code Objaลกnjenje:
- Ovdje koristimo isti kod kao gore, s jedinom razlikom ลกto koristimo naredbu otherwise i opciju "redirectTo" kako bismo odredili koji prikaz treba uฤitati ako nije navedena ruta. U naลกem sluฤaju ลพelimo da se prikaลพe prikaz '/Angular'.
Ako je kod uspjeลกno izvrลกen, sljedeฤi izlaz ฤe se prikazati kada pokrenete kod u pregledniku.
Izlaz:
Iz izlaza,
- Jasno moลพete vidjeti da je prikazani zadani prikaz AngularJS prikaz.
- To je zato ลกto kada se stranica uฤita, ide na opciju 'drugaฤije' u funkciji $routeProvider i uฤitava prikaz '/Angular'.
Zadana ruta odreฤuje koji se prikaz uฤitava. Sljedeฤi odjeljak pokriva kako jedna ruta moลพe posluลพiti mnoge zapise noseฤi vrijednost u URL.
Kako pristupiti parametrima iz AngularJS rute
Angular takoฤer pruลพa funkcionalnost prosljeฤivanja parametara tijekom usmjeravanja. Parametri se dodaju na kraj rute u URL, Na primjer, http://guru99/index.html#/Angular/1. U ovom primjeru kutnog usmjeravanja,
- http://guru99/index.html je naลกa glavna primjena URL
- Simbol # je razdjelnik izmeฤu glavne aplikacije URL i ruta
- Angular je naลกa ruta
- I konaฤno '1' je parametar koji se dodaje naลกoj ruti
Opฤa sintaksa je HTMLStranica#/ruta/parametar, pa ranije teme postaju Sample.html#/Angular/1, #/Angular/2 i #/Angular/3, gdje je znamenka ID teme.
Pogledajmo detaljno kako moลพemo implementirati Angular rutu s parametrom.
Korak 1) Dodajte sljedeฤi kod svom prikazu
- Dodajte tablicu koja ฤe korisniku prikazati sve teme za teฤaj Angular JS.
- Dodajte redak tablice za prikaz teme โKontroleriโ. Za ovaj redak postavite href na โ#!/Angular/1โ, tako da klik na temu prosljeฤuje parametar 1 u URL zajedno s rutom.
- Dodajte redak za temu โModeliโ s href postavljenim na โ#!/Angular/2โ tako da parametar 2 putuje u URL.
- Dodajte redak za temu โSmjerniceโ s href postavljenim na โ#!/Angular/3โ tako da parametar 3 putuje u URL.
Korak 2) Dodajte ID teme u servisnu funkciju routeProvider
U servisnoj funkciji routeProvider dodajte :topicId rezervirano mjesto za oznaฤavanje da bilo koji parametar proslijeฤen u URL nakon ลกto se ruta dodijeli varijabli topicId.
Korak 3) Dodajte potreban kod u kontroler
- Obavezno prvo dodajte "$routeParams" kao parametar prilikom definiranja funkcije kontrolera. Ovaj parametar ฤe imati pristup svim parametrima rute proslijeฤenim u URL.
- โ$routeParamsโ sadrลพi topicId proslijeฤen u ruti. Prilaganje
$routeParams.topicIddo opsega kao$scope.tutorialidฤini ga dostupnim pogledu kao 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>
โ ๏ธ Primijenjene su ispravke. U originalu je koriลกteno slovo l umjesto znamenke 1 in href="#Angular/l", izostavljeno ng-view kontejner tako da predloลพak nije imao gdje za renderiranje i uฤitavao se angular-route.js prije angular.min.js, ลกto izbacuje greลกku modula.
Korak 4) Dodajte izraz za prikaz varijable
Dodajte izraz za prikaz varijable tutorialid na stranici Angular.html.
<h2>Angular</h2> <br><br>{{tutorialid}}
Ako je kod uspjeลกno izvrลกen, sljedeฤi izlaz ฤe se prikazati kada pokrenete kod u pregledniku.
Izlaz:
Na izlaznom ekranu,
- Ako kliknete na poveznicu Detalji teme za prvu temu, broj 1 ฤe se dodati URL.
- Taj se broj uzima kao argument "routeParams" i postaje dostupan u kontroleru.
ฤitanje parametra je jednostavno. Dohvaฤanje zapisa koji parametar identificira, prije nego ลกto se prikaz pojavi, zadatak je svojstva koje je sljedeฤe obraฤeno.
Kako unaprijed uฤitati podatke pomoฤu svojstva resolve
Kontroler u prethodnom odjeljku ฤita ID teme i odmah ga prikazuje. Prave aplikacije prvo moraju dohvatiti zapis s posluลพitelja, a ako se prikaz iscrta prije nego ลกto se taj zahtjev vrati, korisnik vidi prazan predloลพak koji se popunjava trenutak kasnije. resolve svojstvo uklanja taj bljesak praznog sadrลพaja.
Svaki kljuฤ unutar resolve Objekt je ovisnost koju AngularJS priprema prije aktiviranja rute. Ako je vrijednost obeฤanje, usmjerivaฤ ฤeka da se ono ispuni. Tek nakon ลกto se svako obeฤanje rijeลกi, AngularJS instancira kontroler i renderira predloลพak, a rijeลกene vrijednosti se ubrizgavaju u kontroler po imenu, baลก kao i svaka druga usluga.
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; }]);
Ovdje su vaลพna dva ponaลกanja. Odbijeno obeฤanje poniลกtava promjenu rute i ostavlja preglednik na trenutnom prikazu, tako da neuspjeli zahtjev nikada ne stvara oลกteฤenu stranicu. Meฤutim, buduฤi da usmjerivaฤ blokira dok je obeฤanje na ฤekanju, spora krajnja toฤka ฤini da aplikacija izgleda zamrznuto. Uparivanje resolve s pokazateljem napretka kojim upravlja $routeChangeStart i $routeChangeSuccess dogaฤanja.
โ ๏ธ Upozorenje: Nikada ne postavljajte provjere autentiฤnosti samo unutra resolveOdbijanje rute skriva pogled, ali ne ลกtiti podatke iza njega, a API krajnja toฤka i dalje mora nametnuti pristup na posluลพitelju.
Osim prethodnog uฤitavanja podataka, ruta moลพe nositi i statiฤke konfiguracijske vrijednosti. U nastavku je opisana usluga kako ih kontroler ฤita.
Kako koristiti uslugu Angular $route
Usluga $route omoguฤuje vam pristup svojstvima rute. Usluga $route dostupna je kao parametar kada je funkcija definirana u kontroleru. Opฤa sintaksa naฤina na koji je parametar $route dostupan iz kontrolera prikazana je u nastavku.
myApp.controller('MyController', function($scope, $route) { ... });
- myApp je AngularJS modul definiran za vaลกu aplikaciju.
- MyController je naziv kontrolera definiranog za vaลกu aplikaciju.
- Kao ลกto $scope prenosi informacije iz kontrolera u pogled, $route otkriva svojstva trenutne rute.
Pogledajmo kako moลพemo koristiti uslugu $route.
U ovom primjeru
- Napravit ฤemo jednostavnu prilagoฤenu varijablu pod nazivom "mytext", koja ฤe sadrลพavati niz "This is angular."
- Ovu varijablu ฤemo priloลพiti naลกoj ruti. Later Pristupit ฤemo ovom nizu iz naลกeg kontrolera koristeฤi uslugu $route, a zatim ฤemo koristiti objekt scope za njegov prikaz u naลกem pogledu.
Dakle, pogledajmo korake koje trebamo poduzeti da bismo to postigli.
Korak 1) Dodajte prilagoฤeni par kljuฤ-vrijednost ruti. Ovdje dodajemo kljuฤ pod nazivom 'mytext' i dodjeljujemo mu vrijednost "Ovo je kutno."
Korak 2) Dodajte odgovarajuฤi kod kontroleru.
- Dodajte parametar $route kontrolerskoj funkciji. Parametar $route je kljuฤni parametar definiran u Angularu, koji omoguฤuje pristup svojstvima rute.
- Varijabli โmytextโ koja je definirana u ruti moลพe se pristupiti putem $route.current reference. To se zatim dodjeljuje varijabli 'tekst' objekta opsega. Tekstualnoj varijabli se tada moลพe pristupiti iz prikaza u skladu s tim.
// 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; }]);
Korak 3) Dodajte referencu na tekstualnu varijablu iz objekta opsega kao izraz. To ฤe biti dodano na naลกu stranicu Angular.html kao ลกto je prikazano u nastavku.
To ฤe dovesti do umetanja teksta "Ovo je kutno" u prikaz. Izraz {{tutorialid}} je isti kao onaj viฤen u prethodnoj temi i ovo ฤe prikazati broj '1'.
<h2>Angular</h2> <br><br>{{text}} <br><br>{{tutorialid}}
Ako je kod uspjeลกno izvrลกen, sljedeฤi izlaz ฤe se prikazati kada pokrenete kod u pregledniku.
Izlaz:
Iz izlaza,
- Vidimo da se tekst "Ovo je kutno" takoฤer prikazuje kada kliknemo na bilo koju poveznicu u tablici. ID teme takoฤer se prikazuje u isto vrijeme kad i tekst.
Svaki URL do sada prikazano joลก uvijek nosi simbol #. Zavrลกni korak konfiguracije ga uklanja.
Omoguฤivanje HTML5 usmjeravanja
HTML5 usmjeravanje se koristi za stvaranje ฤistog URLs. To znaฤi uklanjanje hashtaga iz URLDakle, usmjeravanje URLs, kada se koristi HTML5 usmjeravanje, izgledalo bi kao ลกto je prikazano dolje.
Uzorak.html/Angular/1
Uzorak.html/Angular/2
Uzorak.html/Angular/3
Ovaj koncept je obiฤno poznat kao predstavljanje priliฤno URL korisniku.
Dva su glavna koraka koja je potrebno izvrลกiti za HTML2 usmjeravanje.
- Konfiguriranje $locationProvider
- Postavljanje naลกe baze za relativne veze
Pogledajmo detaljno kako izvrลกiti gore navedene korake u naลกem primjeru.
Korak 1) Dodajte odgovarajuฤi kod u Angular modul.
- Dodaj
<base>oznaku u zaglavlje dokumenta. To je potrebno za HTML5 usmjeravanje kako bi aplikacija znala koja je osnovna lokacija aplikacije. - Dodajte uslugu $locationProvider. Ova usluga vam omoguฤuje definiranje html5Mode-a.
- Postavite html5Mode usluge $locationProvider na true.
Korak 2) Uklonite sve # oznake za poveznice ('Angular/1', 'Angular/2', 'Angular/3') kako biste stvorili lako ฤitljivu stranicu 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>
โ ๏ธ Ispravak: izvornik je proglasio baseUrl konstanta koja pokazuje na lokalnu IDE putanju, ลกto nema utjecaja na html5Mode. AngularJS ฤita osnovnu lokaciju iz <base href> oznaka. Izvornik je takoฤer ubrizgan $locationProvider bez ikakvog poziva html5Mode(true), tako da hash nikada nije uklonjen.
Ako je kod uspjeลกno izvrลกen, sljedeฤi izlaz ฤe se prikazati kada pokrenete kod u pregledniku.
Izlaz:
Iz izlaza,
- Moลพete vidjeti da oznaka # nije tu kada pristupate aplikaciji.
Sve gore navedeno koristi ngRoute, usmjerivaฤ koji je isporuฤio AngularJS tim. To nije jedina opcija, a usporedba u nastavku objaลกnjava kada je alternativa bolja opcija.
ngRoute vs. ui-router: Koji ruter odabrati
ngRoute odrลพava AngularJS tim i podudara se s URL izravno na jedan predloลพak i kontroler. ui-router je zajedniฤki projekt izgraฤen kako bi se uklonilo glavno ograniฤenje ngRoutea: podudara se s aplikacijom su a ne na URL samo, ลกto omoguฤuje da jedan zaslon sadrลพi nekoliko neovisno usmjeranih regija.
| Aspekt | ngRoute | UI-usmjerivaฤ |
|---|---|---|
| Usluga konfiguracije | $routeProvider | $stateProvider |
| Utakmice na | URL samo | Imenovana drลพava, URL opcionalno |
| Ugnijeลพฤeni prikazi | Nije podrลพano | Podrลพano |
| Viลกe prikaza po ekranu | Jedan ng-pogled | Mnogo imenovanih ui-view prodajnih mjesta |
| Ugnijeลพฤeno rjeลกenje | Nije podrลพano | Podreฤena stanja nasljeฤuju roditeljska rjeลกenja |
| Najprikladniji za | Ravne, male primjene | Nadzorne ploฤe i slojeviti rasporedi |
Odaberite ngRoute kada svaki URL mapira na jedan prikaz cijele stranice, buduฤi da ne treba dodatnu ovisnost i cijeli API stane na jednu stranicu. Odaberite ui-router kada zaslon ima okna koja se neovisno kreฤu ili kada podreฤeni prikazi moraju ponovno koristiti podatke koje je uฤitao roditelj. Migracija kasnije je moguฤa, ali nije trivijalna, jer nazivi stanja zamjenjuju URL uzorke u svim predloลกcima.
Uobiฤajene AngularJS greลกke usmjeravanja i kako ih ispraviti
Veฤina kvarova usmjeravanja rezultira praznim ng-viewom umjesto konzolne pogreลกke, ลกto ih ฤini teลพima za dijagnosticiranje nego ลกto bi trebalo biti. Svaki simptom u nastavku navodi svoj uzrok i rjeลกenje.
- Nepoznati pruลพatelj usluga: $routeProvider: angular-route.js nikada nije uฤitan, ili je uฤitan prije angular.min.js. Prvo referencirajte glavnu biblioteku.
- Prikaz ostaje prazan bez greลกke: Nijedan element ne sadrลพi direktivu ng-view, tako da predloลพak nema gdje za renderiranje.
- Niลกta se ne uฤitava pri prvom posjetu: Nijedna ruta ne odgovara praznoj putanji. Dodajte blok otherwise s vrijednoลกฤu redirectTo.
- $routeParams je prazan: Uzorku nedostaje rezervirano mjesto za dvotoฤku. Mora glasiti '/Angular/:topicId'.
- Predloลกci 404 nakon html5Mode: konfigurirajte posluลพitelj da prepiลกe neusklaฤene putanje do osnovne stranice i potvrdite prisutnost osnovne oznake href.
- Kontroler se nikada ne ponovno pokreฤe: promijenio se samo parametar, pa je AngularJS ponovno upotrijebio instancu kontrolera umjesto da je ponovno izgradi. Osluลกkujte dogaฤaj $routeUpdate umjesto da se oslanjate na ponovno aktiviranje funkcije kontrolera.
























