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.

  • ๐Ÿงฉ Osnovni mehanizam: $routeProvider pronalazi fragment nakon simbola # i uฤitava upareni templateUrl i kontroler u ng-view.
  • ???? Potrebna ovisnost: Rutiranje se nalazi izvan osnovne biblioteke, tako da se angular-route.js mora referencirati i ngRoute deklarirati u modulu.
  • ๐ŸŽฏ Zadana ruta: Blok otherwise preusmjerava svaku neusklaฤ‘enu putanju, sprjeฤavajuฤ‡i prazan prikaz prilikom prvog uฤitavanja aplikacije.
  • ๐Ÿ”ข Parametri rute: Dvotoฤka kao ลกto je :topicId biljeลพi URL segmenti, koje kontroler ฤita putem $routeParams.
  • โณ Prethodno uฤitavanje podataka: Svojstvo resolve zavrลกava dohvaฤ‡anje podataka prije nego ลกto se kontroler pokrene, tako da se pogled nikada ne prikazuje u praznom stanju.
  • ๐Ÿ”— bjelica URLs: Postavljanjem html5Mode na $locationProvider uklanja se hash, iako posluลพitelj tada mora prepisati nepoznate putanje do osnovne stranice.

AngularJS usmjeravanje s parametrima

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.

  1. 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.
  2. 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']);
  1. 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)
  1. 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/>
  1. 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.

AngularJS usmjeravanje

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.โ€

AngularJS usmjeravanje

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โ€.

AngularJS usmjeravanje

Korak 4) U svoju oznaku skripte za AngularJS dodajte โ€œngRoute moduleโ€ i โ€œ$routeProviderโ€ uslugu.

AngularJS usmjeravanje

Code Objaลกnjenje:

  1. Ukljuฤite modul โ€žngRouteโ€œ. S ovim na mjestu, Angular automatski obraฤ‘uje usmjeravanje i razumije sve naredbe usmjeravanja.
  2. $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.
  3. Napravite jednu rutu za Angular poveznicu: kada se klikne na nju, ubrizgajte Angular.html i koristite 'AngularController' za poslovnu logiku.
  4. 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.

AngularJS usmjeravanje

<!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.

AngularJS usmjeravanje

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.

  1. Koriลกtenje ng-repeat direktiva proฤ‡i kroz svaki par kljuฤ-vrijednost definiran u varijabli tutoriala.
  2. 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 tutorial varijabla koju svaki kontroler opskrbljuje iz vlastitog opsega.

AngularJS usmjeravanje

โš ๏ธ 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:

AngularJS usmjeravanje

Ako kliknete na poveznicu AngularJS Topics, prikazat ฤ‡e se donji ispis.

AngularJS usmjeravanje

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).

AngularJS usmjeravanje

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.

Stvaranje zadane rute u AngularJS

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:

  1. 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:

Stvaranje zadane rute u AngularJS

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,

  1. http://guru99/index.html je naลกa glavna primjena URL
  2. Simbol # je razdjelnik izmeฤ‘u glavne aplikacije URL i ruta
  3. Angular je naลกa ruta
  4. 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

  1. Dodajte tablicu koja ฤ‡e korisniku prikazati sve teme za teฤaj Angular JS.
  2. 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.
  3. Dodajte redak za temu โ€žModeliโ€œ s href postavljenim na โ€ž#!/Angular/2โ€œ tako da parametar 2 putuje u URL.
  4. Dodajte redak za temu โ€žSmjerniceโ€œ s href postavljenim na โ€ž#!/Angular/3โ€œ tako da parametar 3 putuje u URL.

Parametri pristupa iz AngularJS rute

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.

Parametri pristupa iz AngularJS rute

Korak 3) Dodajte potreban kod u kontroler

  1. Obavezno prvo dodajte "$routeParams" kao parametar prilikom definiranja funkcije kontrolera. Ovaj parametar ฤ‡e imati pristup svim parametrima rute proslijeฤ‘enim u URL.
  2. โ€ž$routeParamsโ€ sadrลพi topicId proslijeฤ‘en u ruti. Prilaganje $routeParams.topicId do opsega kao $scope.tutorialid ฤini ga dostupnim pogledu kao tutorialid.

Parametri pristupa iz AngularJS rute

<!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.

Parametri pristupa iz AngularJS rute

<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:

Parametri pristupa iz AngularJS rute

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) { ... });
  1. myApp je AngularJS modul definiran za vaลกu aplikaciju.
  2. MyController je naziv kontrolera definiranog za vaลกu aplikaciju.
  3. 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."

Usluga kutne rute

Korak 2) Dodajte odgovarajuฤ‡i kod kontroleru.

  1. Dodajte parametar $route kontrolerskoj funkciji. Parametar $route je kljuฤni parametar definiran u Angularu, koji omoguฤ‡uje pristup svojstvima rute.
  2. 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.

Usluga kutne rute

// 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'.

Usluga kutne rute

<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:

Usluga kutne rute

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.

  1. Konfiguriranje $locationProvider
  2. 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.

  1. Dodaj <base> oznaku u zaglavlje dokumenta. To je potrebno za HTML5 usmjeravanje kako bi aplikacija znala koja je osnovna lokacija aplikacije.
  2. Dodajte uslugu $locationProvider. Ova usluga vam omoguฤ‡uje definiranje html5Mode-a.
  3. Postavite html5Mode usluge $locationProvider na true.

Omoguฤ‡ivanje HTML5 usmjeravanja

Korak 2) Uklonite sve # oznake za poveznice ('Angular/1', 'Angular/2', 'Angular/3') kako biste stvorili lako ฤitljivu stranicu URLs.

Omoguฤ‡ivanje HTML5 usmjeravanja

<!-- 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:

Omoguฤ‡ivanje HTML5 usmjeravanja

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.

Pitanja i odgovori

$routeParams vraฤ‡a i rezervirana mjesta puta i vrijednosti niza upita spojene u jedan objekt. $location.search() vraฤ‡a samo niz upita. Koristite $routeParams unutar kontrolera i $location.search() prilikom izravnog ฤitanja ili pisanja vrijednosti upita.

Da. Bez hash-a, preglednik ลกalje punu putanju posluลพitelju prilikom osvjeลพavanja ili dijeljene poveznice. Posluลพitelj mora prepisati svaku neusklaฤ‘enu putanju natrag na osnovnu HTML stranicu, inaฤe ฤ‡e duboke poveznice vratiti greลกku 404.

AngularJS je dosegao kraj svog ลพivotnog vijeka u prosincu 2021. i ne prima daljnja aลพuriranja. ngRoute ostaje prikladan za odrลพavanje postojeฤ‡ih AngularJS aplikacija, ali novi projekti bi trebali koristiti trenutno podrลพani okvir.

Da. AI Asistenti mapiraju svaki when blok na unos u polju Routes i prevode kljuฤeve rjeลกavanja u razrjeลกivaฤe ruta. Revruฤno upravljanje zaลกtitnim znakovima i zamjenskim znakovima, buduฤ‡i da dva usmjerivaฤa razliฤito tretiraju neusklaฤ‘ene putove.

AI alati provjeravaju tri uobiฤajena uzroka redom: nedostajuฤ‡u ovisnost ngRoute, odsutni element ng-view i uzorak rute koji ne odgovara URLOpisivanje simptoma i lijepljenje konfiguracijskog bloka obiฤno izolira kvar.

Saลพmite ovu objavu uz: