Rutare AngularJs cu parametri

โšก Rezumat inteligent

Rutarea รฎn AngularJS transformฤƒ o singurฤƒ paginฤƒ HTML รฎntr-o aplicaศ›ie multi-view prin hartฤƒping URL fragmente cฤƒtre ศ™abloane ศ™i controlere. Modulul ngRoute ศ™i serviciul $routeProvider definesc aceste hฤƒrศ›ipings, รฎn timp ce directiva ng-view injecteazฤƒ ศ™ablonul corespunzฤƒtor.

  • ๐Ÿงฉ Mecanism de bazฤƒ: `$routeProvider` potriveศ™te fragmentul de dupฤƒ simbolul # ศ™i รฎncarcฤƒ templateUrl-ul ศ™i controlerul asociate รฎn ng-view.
  • ๐Ÿ“ฆ Dependenศ›ฤƒ necesarฤƒ: Rutarea se aflฤƒ รฎn afara bibliotecii principale, aศ™a cฤƒ angular-route.js trebuie referenศ›iat ศ™i ngRoute declarat รฎn modul.
  • ๐ŸŽฏ Rutฤƒ implicitฤƒ: Blocul โ€žotherwiseโ€ redirecศ›ioneazฤƒ orice cale nepotrivitฤƒ, prevenind o vizualizare goalฤƒ la prima รฎncฤƒrcare a aplicaศ›iei.
  • ๐Ÿ”ข Parametrii rutei: Un substituent pentru douฤƒ puncte, cum ar fi :topicId, captureazฤƒ URL segmente, pe care controlerul le citeศ™te prin $routeParams.
  • โณ Preรฎncฤƒrcare date: Proprietatea resolve terminฤƒ preluarea datelor รฎnainte ca controlerul sฤƒ ruleze, astfel รฎncรขt vizualizarea nu se redฤƒ niciodatฤƒ รฎntr-o stare goalฤƒ.
  • ๐Ÿ”— Curat URLs: Setarea html5Mode pe $locationProvider eliminฤƒ hash-ul, deศ™i serverul trebuie apoi sฤƒ rescrie cฤƒile necunoscute cฤƒtre pagina de bazฤƒ.

Rutare AngularJS cu parametri

รŽnainte de a analiza cum funcศ›ioneazฤƒ rutarea รฎn AngularJS, este util sฤƒ รฎnศ›elegem tipul de aplicaศ›ie pentru care a fost construitฤƒ rutarea. Secศ›iunea de mai jos stabileศ™te acest context, iar fiecare tehnicฤƒ care urmeazฤƒ se bazeazฤƒ pe acesta.

Ce sunt aplicaศ›iile cu o singurฤƒ paginฤƒ?

Aplicaศ›iile cu o singurฤƒ paginฤƒ, sau SPA-uri, sunt aplicaศ›ii web care รฎncarcฤƒ o singurฤƒ paginฤƒ HTML ศ™i apoi actualizeazฤƒ dinamic pagina respectivฤƒ pe mฤƒsurฤƒ ce utilizatorul interacศ›ioneazฤƒ cu ea. รŽn loc sฤƒ solicite un document nou de la server pentru fiecare clic, un SPA schimbฤƒ doar porศ›iunea paginii care s-a modificat.

Acest design creeazฤƒ o problemฤƒ. Dacฤƒ browserul nu navigheazฤƒ niciodatฤƒ cฤƒtre un document nou, bara de adrese nu se schimbฤƒ niciodatฤƒ, deci utilizatorul nu poate adฤƒuga un ecran la favorite, nu รฎl poate partaja sau nu poate folosi butonul รŽnapoi. Rutarea rezolvฤƒ exact aceastฤƒ problemฤƒ.

Ce este rutarea รฎn AngularJS?

Rutare รฎn AngularJS este o metodฤƒ care vฤƒ permite sฤƒ creaศ›i aplicaศ›ii cu o singurฤƒ paginฤƒ. Vฤƒ permite sฤƒ creaศ›i diferite URLs pentru conศ›inut diferit รฎn aplicaศ›iile web. Rutarea AngularJS ajutฤƒ, de asemenea, la afiศ™area mai multor conศ›inuturi รฎn funcศ›ie de ruta aleasฤƒ. Este specificatฤƒ รฎn URL dupฤƒ semnul #.

Sฤƒ luฤƒm exemplul unui site gฤƒzduit prin intermediul URL http://example.com/index.html.

Aceastฤƒ paginฤƒ gฤƒzduieศ™te ecranul principal al aplicaศ›iei tale. Sฤƒ presupunem cฤƒ aplicaศ›ia organizeazฤƒ un eveniment ศ™i utilizatorul doreศ™te sฤƒ listeze evenimentele, sฤƒ vizualizeze unul รฎn detaliu sau sฤƒ ศ™teargฤƒ unul. รŽntr-o aplicaศ›ie cu o singurฤƒ paginฤƒ cu rutarea activatฤƒ, toate acestea sunt disponibile prin intermediul urmฤƒtoarelor linkuri.

Simbolul # va fi folosit รฎmpreunฤƒ cu diferitele rute (ShowEvent, DisplayEvent ศ™i DeleteEvent).

  • Pentru a vedea toate evenimentele, utilizatorul este direcศ›ionat cฤƒtre http://example.com/index.html#ShowEvent
  • Pentru a vedea un anumit eveniment, li se รฎndrumฤƒ cฤƒtre http://example.com/index.html#DisplayEvent
  • Pentru a ศ™terge un eveniment, aceศ™tia sunt direcศ›ionaศ›i cฤƒtre http://example.com/index.html#DeleteEvent

Reศ›ineศ›i cฤƒ principalul URL rฤƒmรขne la fel. Se schimbฤƒ doar fragmentul de dupฤƒ #, iar acel fragment este ceea ce AngularJS urmฤƒreศ™te. Odatฤƒ ce conceptul este stabilit, urmฤƒtoarea secศ›iune prezintฤƒ componentele pe care trebuie sฤƒ le conectaศ›i รฎnainte ca oricare dintre ele sฤƒ funcศ›ioneze.

Adฤƒugarea rutei AngularJS folosind $routeProvider

Aศ™a cum s-a discutat anterior, rutele รฎn AngularJS sunt folosite pentru a direcศ›iona utilizatorul cฤƒtre o altฤƒ vizualizare a aplicaศ›iei. Aceastฤƒ direcศ›ionare se face pe aceeaศ™i paginฤƒ HTML, astfel รฎncรขt utilizatorul are experienศ›a cฤƒ nu a pฤƒrฤƒsit pagina.

Pentru a implementa rutarea, urmฤƒtorii paศ™i principali trebuie implementaศ›i รฎn aplicaศ›ia dvs. รฎntr-o anumitฤƒ ordine.

  1. Referinศ›ฤƒ angular-route.js. Aceasta JavaScenariu fiศ™ier, dezvoltat de Google, conศ›ine toate funcศ›ionalitฤƒศ›ile de rutare ศ™i trebuie inclus pentru ca aplicaศ›ia sฤƒ poatฤƒ face referire la nevoile de rutare ale modulelor.
  2. Adฤƒugaศ›i o dependenศ›ฤƒ la modulul ngRoute din cadrul aplicaศ›iei. Fฤƒrฤƒ aceastฤƒ dependenศ›ฤƒ, rutarea nu poate fi utilizatฤƒ deloc รฎn aplicaศ›ia AngularJS.

Mai jos este sintaxa generalฤƒ a acestei declaraศ›ii. Aceasta este doar o declaraศ›ie normalฤƒ a unui modul cu includerea cuvรขntului cheie ngRoute.

var module = angular.module("sampleApp", ['ngRoute']);
  1. Configuraศ›i $routeProvider. Acesta oferฤƒ diversele rute din aplicaศ›ia dvs., iar sintaxa precizeazฤƒ pur ศ™i simplu cฤƒ, atunci cรขnd este aleasฤƒ calea relevantฤƒ, se foloseศ™te ruta pentru a afiศ™a vizualizarea datฤƒ.
when(path, route)
  1. Linkuri cฤƒtre traseul dvs. din pagina dvs. HTML. รŽn pagina dvs. HTML, veศ›i adฤƒuga legฤƒturi de referinศ›ฤƒ la diferitele rute disponibile รฎn aplicaศ›ia dvs.
<a href="#!/route1">Route 1</a><br/>
  1. รŽn cele din urmฤƒ ar fi includerea directiva ng-view, care ar fi รฎn mod normal รฎntr-o etichetฤƒ div. Aceasta ar fi folositฤƒ pentru a injecta conศ›inutul vizualizฤƒrii atunci cรขnd este aleasฤƒ ruta relevantฤƒ.

๐Ÿ‘ Sfat: Toศ›i cei cinci paศ™i sunt obligatorii. O referinศ›ฤƒ angular-route.js lipsฤƒ este cel mai frecvent motiv pentru care o rutฤƒ nu face nimic รฎn mod silenศ›ios, deoarece $routeProvider nu existฤƒ fฤƒrฤƒ ea. Urmฤƒtoarea secศ›iune prezintฤƒ toศ›i cei cinci รฎntr-un exemplu funcศ›ional.

Exemplu de rutare AngularJS

Acum, sฤƒ ne uitฤƒm la un exemplu de rutare folosind paศ™ii menศ›ionaศ›i mai sus.

รŽn exemplul nostru de rutare AngularJS cu parametri,

  • Un link este pentru a afiศ™a subiectele pentru un AngularJS desigur, iar celฤƒlalt este pentru Node.js curs.
  • Cรขnd utilizatorul face clic pe oricare dintre linkuri, vor fi afiศ™ate subiectele pentru cursul respectiv.

Pas 1) Includeศ›i fiศ™ierul cu rutฤƒ unghiularฤƒ ca referinศ›ฤƒ de script.

Rutare AngularJS

Acest fiศ™ier de rutฤƒ este necesar pentru a utiliza funcศ›ionalitฤƒศ›ile oferite de existenศ›a mai multor rute ศ™i vizualizฤƒri. Acest fiศ™ier poate fi descฤƒrcat de pe site-ul web AngularJS.

Pas 2) Adฤƒugaศ›i etichete href care vor reprezenta link-uri cฤƒtre โ€žSubiecte Angular JSโ€ ศ™i โ€žSubiecte Node JSโ€.

Rutare AngularJS

Pas 3) Adฤƒugaศ›i o etichetฤƒ div cu directiva ng-view care va reprezenta vizualizarea.

Acest lucru va permite vizualizarea corespunzฤƒtoare sฤƒ fie injectatฤƒ ori de cรขte ori utilizatorul face clic pe โ€žSubiecte JS Angularโ€ sau โ€žSubiecte JS Nodeโ€.

Rutare AngularJS

Pas 4) รŽn eticheta de script pentru AngularJS, adฤƒugaศ›i โ€žmodulul ngRouteโ€ ศ™i serviciul โ€ž$routeProviderโ€.

Rutare AngularJS

Code Explicaลฃie:

  1. Includeศ›i โ€žmodulul ngRouteโ€. Cu acesta implementat, Angular gestioneazฤƒ automat rutarea ศ™i รฎnศ›elege toate comenzile de rutare.
  2. `$routeProvider` este un serviciu care ascultฤƒ รฎn fundal rutele apelate. Cรขnd utilizatorul dฤƒ clic pe un link, acesta detecteazฤƒ acest lucru ศ™i decide ce rutฤƒ sฤƒ urmeze.
  3. Creaศ›i o rutฤƒ pentru linkul Angular: cรขnd se face clic pe acesta, injectaศ›i Angular.html ศ™i utilizaศ›i โ€žAngularControllerโ€ pentru logica de business.
  4. Creaศ›i o rutฤƒ pentru linkul Node, care injecteazฤƒ Node.html ศ™i utilizeazฤƒ โ€žNodeControllerโ€ รฎn acelaศ™i mod.

Pas 5) Urmฤƒtorul este sฤƒ adฤƒugaศ›i controlere pentru a procesa logica de afaceri atรขt pentru AngularController, cรขt ศ™i pentru NodeController.

รŽn fiecare controller, creฤƒm o matrice de perechi cheie-valoare pentru a stoca numele ศ™i descrierile subiectelor pentru fiecare curs. Variabila matrice โ€žtutorialโ€ este adฤƒugatฤƒ la obiectul scope pentru fiecare controller.

Rutare AngularJS

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

โš ๏ธ Corecศ›iile au fost aplicate. <title> eticheta stฤƒtea รฎnฤƒuntru <body>, chrset="UTF 8" a fost scris greศ™it, al doilea link indica #Node.html รฎn loc de ruta รฎnregistratฤƒ /Nodeศ™i cฤƒile ศ™ablonului aveau o barฤƒ oblicฤƒ iniศ›ialฤƒ care porneศ™te de la rฤƒdฤƒcina domeniului.

Rutare AngularJS

Pas 6) Creaศ›i pagini numite Angular.html ศ™i Node.html. Pentru fiecare paginฤƒ parcurgem paศ™ii de mai jos.

Aceศ™ti paศ™i se vor asigura cฤƒ toate perechile cheie-valoare ale matricei sunt afiศ™ate pe fiecare paginฤƒ.

  1. Utilizarea directiva ng-repeat pentru a parcurge fiecare pereche cheie-valoare definitฤƒ รฎn variabila tutorialului.
  2. Se afiศ™eazฤƒ numele ศ™i descrierea fiecฤƒrei perechi cheie-valoare.
  • Angular.html
<h2>Angular</h2>
<ul ng-repeat="ptutor in tutorial">
<li>Course : {{ptutor.Name}} - {{ptutor.Description}}</li>
</ul>
  • Node.html โ€” identic cu lista de mai sus, cu titlul schimbat รฎn โ€žNodโ€. Ambele ศ™abloane au acelaศ™i text tutorial variabilฤƒ, pe care fiecare controler o furnizeazฤƒ din propriul sฤƒu domeniu de aplicare.

Rutare AngularJS

โš ๏ธ Corecลฃie: Titlul din fiศ™ierul Angular.html original suna โ€žAnglerโ€. Ortografia este corectatฤƒ mai sus.

Dacฤƒ codul este executat cu succes, urmฤƒtorul rezultat va fi afiศ™at atunci cรขnd rulaศ›i codul รฎn browser.

ieศ™ire:

Rutare AngularJS

Dacฤƒ daศ›i clic pe linkul AngularJS Topics, va fi afiศ™at rezultatul de mai jos.

Rutare AngularJS

Rezultatul aratฤƒ clar cฤƒ,

  • Cรขnd se face clic pe linkul โ€žSubiecte Angular JSโ€, โ€‹โ€‹routeProvider pe care l-am declarat รฎn codul nostru decide ca codul Angular.html sฤƒ fie injectat.
  • Acest cod va fi injectat รฎn eticheta โ€ždivโ€, care conศ›ine directiva ng-view. De asemenea, conศ›inutul pentru descrierea cursului provine din โ€žvariabila tutorialโ€ care a fฤƒcut parte din obiectul de aplicare definit รฎn AngularController.
  • Cรขnd se face clic pe Node.js Subiecte, va avea loc acelaศ™i rezultat, iar vizualizarea pentru subiectele Node.js se va manifesta.
  • De asemenea, observaศ›i cฤƒ pagina URL rฤƒmรขne la fel. Se schimbฤƒ doar ruta de dupฤƒ eticheta #, iar acesta este conceptul aplicaศ›iilor cu o singurฤƒ paginฤƒ. Eticheta #hash din URL este un separator รฎntre rutฤƒ (care รฎn cazul nostru este โ€žAngularโ€) ศ™i pagina HTML principalฤƒ (Sample.html).

Rutare AngularJS

Exemplul funcศ›ioneazฤƒ doar atunci cรขnd utilizatorul dฤƒ clic pe un link care corespunde unei rute รฎnregistrate. Urmฤƒtoarea secศ›iune trateazฤƒ ce ar trebui sฤƒ se รฎntรขmple atunci cรขnd nu se potriveศ™te nimic.

Crearea unei rute implicite รฎn AngularJS

Rutarea รฎn AngularJS oferฤƒ, de asemenea, posibilitatea de a avea o rutฤƒ implicitฤƒ. Aceasta este ruta care este aleasฤƒ dacฤƒ nu existฤƒ nicio potrivire pentru ruta existentฤƒ.

Ruta implicitฤƒ este creatฤƒ prin adฤƒugarea urmฤƒtoarei condiศ›ii la definirea serviciului $routeProvider.

Sintaxa de mai jos รฎnseamnฤƒ pur ศ™i simplu redirecศ›ionarea cฤƒtre o altฤƒ paginฤƒ dacฤƒ oricare dintre rutele existente nu se potriveศ™te.

otherwise({
  redirectTo: 'page'
});

Sฤƒ folosim acelaศ™i exemplu de mai sus ศ™i sฤƒ adฤƒugฤƒm o rutฤƒ implicitฤƒ la serviciul nostru $routeProvider.

Crearea unei rute implicite รฎn 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 Explicaลฃie:

  1. Aici folosim acelaศ™i cod ca mai sus, singura diferenศ›ฤƒ fiind cฤƒ folosim instrucศ›iunea otherwise ศ™i opศ›iunea โ€žredirectToโ€ pentru a specifica ce vizualizare ar trebui รฎncฤƒrcatฤƒ dacฤƒ nu este specificatฤƒ nicio rutฤƒ. รŽn cazul nostru, dorim sฤƒ fie afiศ™atฤƒ vizualizarea โ€ž/Angularโ€.

Dacฤƒ codul este executat cu succes, urmฤƒtorul rezultat va fi afiศ™at atunci cรขnd rulaศ›i codul รฎn browser.

ieศ™ire:

Crearea unei rute implicite รฎn AngularJS

Din ieศ™ire,

  • Puteศ›i vedea clar cฤƒ vizualizarea implicitฤƒ afiศ™atฤƒ este vizualizarea AngularJS.
  • Acest lucru se datoreazฤƒ faptului cฤƒ atunci cรขnd pagina se รฎncarcฤƒ, trece la opศ›iunea โ€žaltfelโ€ din funcศ›ia $routeProvider ศ™i รฎncarcฤƒ vizualizarea โ€ž/Angularโ€.

O rutฤƒ implicitฤƒ decide ce vizualizare se รฎncarcฤƒ. Urmฤƒtoarea secศ›iune prezintฤƒ modul รฎn care o singurฤƒ rutฤƒ poate servi mai multe รฎnregistrฤƒri prin transportul unei valori รฎn URL.

Cum sฤƒ accesaศ›i parametrii de pe ruta AngularJS

Angular oferฤƒ ศ™i funcศ›ionalitatea de a transmite parametri รฎn timpul rutฤƒrii. Parametrii sunt adฤƒugaศ›i la sfรขrศ™itul rutei รฎn URL, De exemplu, http://guru99/index.html#/Angular/1. รŽn acest exemplu de rutare unghiularฤƒ,

  1. http://guru99/index.html este principala noastrฤƒ aplicaศ›ie URL
  2. Simbolul # este separatorul dintre aplicaศ›ia principalฤƒ URL ศ™i traseul
  3. Angular este traseul nostru
  4. ศ˜i รฎn cele din urmฤƒ โ€ž1โ€ este parametrul care se adaugฤƒ la traseul nostru

Sintaxa generalฤƒ este HTMLPage#/route/parameter, deci subiectele anterioare devin Sample.html#/Angular/1, #/Angular/2 ศ™i #/Angular/3, unde cifra este ID-ul subiectului.

Sฤƒ analizฤƒm รฎn detaliu cum putem implementa o rutฤƒ Angular cu un parametru.

Pasul 1) Adฤƒugaศ›i urmฤƒtorul cod la vizualizarea dvs

  1. Adฤƒugaศ›i un tabel pentru a afiศ™a utilizatorului toate subiectele cursului Angular JS.
  2. Adฤƒugaศ›i un rรขnd รฎn tabel pentru afiศ™area subiectului โ€žControllersโ€. Pentru acest rรขnd, setaศ›i href la โ€ž#!/Angular/1โ€, astfel รฎncรขt, dacฤƒ faceศ›i clic pe subiect, sฤƒ fie transmis parametrul 1 din tabel. URL odatฤƒ cu traseul.
  3. Adฤƒugaศ›i un rรขnd pentru subiectul โ€žModeleโ€, cu href setat la โ€ž#!/Angular/2โ€, astfel รฎncรขt parametrul 2 sฤƒ circule รฎn URL.
  4. Adฤƒugaศ›i un rรขnd pentru subiectul โ€žDirectiveโ€, cu href setat la โ€ž#!/Angular/3โ€, astfel รฎncรขt parametrul 3 sฤƒ circule รฎn URL.

Accesaศ›i parametrii de pe ruta AngularJS

Pasul 2) Adฤƒugaศ›i ID-ul subiectului รฎn funcศ›ia de serviciu routeProvider
รŽn funcศ›ia de serviciu routeProvider, adฤƒugaศ›i :topicId substituent pentru a indica faptul cฤƒ orice parametru transmis รฎn URL dupฤƒ ce ruta ar trebui atribuitฤƒ variabilei topicId.

Accesaศ›i parametrii de pe ruta AngularJS

Pasul 3) Adฤƒugaศ›i codul necesar controlerului

  1. Asiguraศ›i-vฤƒ cฤƒ adฤƒugaศ›i mai รฎntรขi โ€ž$routeParamsโ€ ca parametru atunci cรขnd definiศ›i funcศ›ia controlerului. Acest parametru va avea acces la toศ›i parametrii de rutฤƒ transmiศ™i รฎn URL.
  2. โ€ž$routeParamsโ€ conศ›ine topicId-ul transmis รฎn rutฤƒ. Ataศ™area $routeParams.topicId la domeniul de aplicare ca $scope.tutorialid รฎl face disponibil vizualizฤƒrii ca tutorialid.

Accesaศ›i parametrii de pe ruta AngularJS

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

โš ๏ธ Corecศ›iile au fost aplicate. Originalul a folosit litera l รฎn loc de cifrฤƒ 1 in href="#Angular/l", a omis ng-view container, astfel รฎncรขt ศ™ablonul nu avea unde sฤƒ fie redat ศ™i s-a รฎncฤƒrcat angular-route.js รฎnainte angular.min.js, care genereazฤƒ o eroare de modul.

Pasul 4) Adฤƒugaศ›i expresia pentru a afiศ™a variabila
Adฤƒugaศ›i expresia pentru a afiศ™a variabila tutorialid รฎn pagina Angular.html.

Accesaศ›i parametrii de pe ruta AngularJS

<h2>Angular</h2>

<br><br>{{tutorialid}}

Dacฤƒ codul este executat cu succes, urmฤƒtorul rezultat va fi afiศ™at atunci cรขnd rulaศ›i codul รฎn browser.

ieศ™ire:

Accesaศ›i parametrii de pe ruta AngularJS

รŽn ecranul de ieศ™ire,

  • Dacฤƒ faceศ›i clic pe linkul Detalii subiect pentru primul subiect, numฤƒrul 1 este adฤƒugat la URL.
  • Numฤƒrul respectiv este luat ca argument โ€žrouteParamsโ€ ศ™i devine accesibil รฎn controler.

Citirea unui parametru este simplฤƒ. Preluarea รฎnregistrฤƒrii identificate de parametru, รฎnainte de apariศ›ia vizualizฤƒrii, este sarcina proprietฤƒศ›ii abordate รฎn continuare.

Cum se preรฎncarcฤƒ datele cu proprietatea resolve

Controlerul din secศ›iunea anterioarฤƒ citeศ™te un ID de subiect ศ™i รฎl afiศ™eazฤƒ imediat. Aplicaศ›iile reale trebuie mai รฎntรขi sฤƒ preia รฎnregistrarea de pe un server, iar dacฤƒ vizualizarea este redatฤƒ รฎnainte ca solicitarea sฤƒ se รฎntoarcฤƒ, utilizatorul vede un ศ™ablon gol care se completeazฤƒ un moment mai tรขrziu. resolve eliminฤƒ acea licฤƒrire de conศ›inut gol.

Fiecare cheie din interiorul unui resolve Un obiect este o dependenศ›ฤƒ pe care AngularJS o pregฤƒteศ™te รฎnainte de activarea rutei. Dacฤƒ valoarea este o promisiune, routerul aศ™teaptฤƒ ca aceasta sฤƒ se stabileascฤƒ. Numai dupฤƒ ce fiecare promisiune a fost rezolvatฤƒ, AngularJS instanศ›iazฤƒ controlerul ศ™i randeazฤƒ ศ™ablonul, iar valorile rezolvate sunt injectate รฎn controler pe nume, exact ca orice alt serviciu.

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;
}]);

Douฤƒ comportamente conteazฤƒ aici. O promisiune respinsฤƒ anuleazฤƒ schimbarea rutei ศ™i lasฤƒ browserul รฎn vizualizarea curentฤƒ, astfel รฎncรขt o solicitare eศ™uatฤƒ nu produce niciodatฤƒ o paginฤƒ nefuncศ›ionalฤƒ. Cu toate acestea, deoarece routerul se blocheazฤƒ รฎn timp ce promisiunea este รฎn aศ™teptare, un punct final lent face ca aplicaศ›ia sฤƒ parฤƒ blocatฤƒ. Pereche resolve cu un indicator de progres condus de $routeChangeStart ศ™i $routeChangeSuccess evenimente.

โš ๏ธ Avertisment: Nu plasaศ›i niciodatฤƒ verificฤƒri de autentificare doar รฎn interior resolveRespingerea unei rute ascunde o vizualizare, dar nu protejeazฤƒ datele din spatele acesteia, iar endpoint-ul API trebuie sฤƒ impunฤƒ รฎn continuare accesul pe server.

Pe lรขngฤƒ preรฎncฤƒrcarea datelor, o rutฤƒ poate transporta ศ™i valori de configurare statice. Serviciul descris รฎn continuare prezintฤƒ modul รฎn care un controler le citeศ™te.

Cum sฤƒ utilizaศ›i serviciul Angular $route

Serviciul $route vฤƒ permite sฤƒ accesaศ›i proprietฤƒศ›ile rutei. Serviciul $route este disponibil ca parametru atunci cรขnd funcศ›ia este definitฤƒ รฎn controler. Sintaxa generalฤƒ a modului รฎn care parametrul $route este pus la dispoziศ›ie de cฤƒtre controler este prezentatฤƒ mai jos.

myApp.controller('MyController', function($scope, $route) { ... });
  1. myApp este modulul AngularJS definit pentru aplicaศ›ia ta.
  2. MyController este numele controlerului definit pentru aplicaศ›ia dumneavoastrฤƒ.
  3. Aศ™a cum $scope transmite informaศ›ii de la controler cฤƒtre vizualizare, $route expune proprietฤƒศ›ile rutei curente.

Sฤƒ vedem cum putem folosi serviciul $route.

รŽn acest exemplu,

  • Vom crea o variabilฤƒ personalizatฤƒ simplฤƒ numitฤƒ โ€žtextul meuโ€, care va conศ›ine ศ™irul โ€žAcesta este unghiularโ€.
  • Vom ataศ™a aceastฤƒ variabilฤƒ rutei noastre. Later Vom accesa acest ศ™ir de caractere din controlerul nostru folosind serviciul $route ศ™i apoi vom folosi obiectul scope pentru a-l afiศ™a รฎn vizualizarea noastrฤƒ.

Deci, haideศ›i sฤƒ vedem paศ™ii pe care trebuie sฤƒ-i facem pentru a realiza acest lucru.

Pas 1) Adฤƒugaศ›i o pereche cheie-valoare personalizatฤƒ la traseu. Aici, adฤƒugฤƒm o cheie numitฤƒ โ€žtextul meuโ€ ศ™i รฎi atribuim o valoare โ€žAcesta este unghiularโ€.

Serviciul Angular $route

Pas 2) Adฤƒugaศ›i codul relevant la controler.

  1. Adฤƒugaศ›i parametrul $route la funcศ›ia controller. Parametrul $route este un parametru cheie definit รฎn Angular, care permite accesarea proprietฤƒศ›ilor rutei.
  2. Variabila โ€žmytextโ€ care a fost definitฤƒ รฎn rutฤƒ poate fi accesatฤƒ prin referinศ›a $route.current. Aceasta este apoi atribuitฤƒ variabilei โ€žtextโ€ a obiectului scope. Variabila text poate fi apoi accesatฤƒ din vizualizare รฎn mod corespunzฤƒtor.

Serviciul Angular $route

// 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;
}]);

Pas 3) Adฤƒugaศ›i o referinศ›ฤƒ la variabila text din obiectul scop ca expresie. Acesta va fi adฤƒugat la pagina noastrฤƒ Angular.html, aศ™a cum se aratฤƒ mai jos.

Acest lucru va face ca textul โ€žAcesta este unghiularโ€ sฤƒ fie injectat รฎn vizualizare. Expresia {{tutorialid}} este aceeaศ™i cu cea vฤƒzutฤƒ รฎn subiectul anterior ศ™i aceasta va afiศ™a numฤƒrul โ€ž1โ€.

Serviciul Angular $route

<h2>Angular</h2>

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

Dacฤƒ codul este executat cu succes, urmฤƒtorul rezultat va fi afiศ™at atunci cรขnd rulaศ›i codul รฎn browser.

ieศ™ire:

Serviciul Angular $route

Din ieศ™ire,

  • Putem vedea cฤƒ textul โ€žAcesta este unghiularโ€ este afiศ™at ศ™i atunci cรขnd facem clic pe oricare dintre linkurile din tabel. ID-ul subiectului este, de asemenea, afiศ™at รฎn acelaศ™i timp cu textul.

Fiecare URL afiศ™at pรขnฤƒ acum are รฎncฤƒ simbolul #. Pasul final de configurare รฎl eliminฤƒ.

Se activeazฤƒ rutarea HTML5

Rutarea HTML5 este utilizatฤƒ pentru a crea informaศ›ii curate URLs. รŽnseamnฤƒ eliminarea hashtag-ului din URLDeci rutarea URLs, atunci cรขnd se utilizeazฤƒ rutarea HTML5, ar apฤƒrea aศ™a cum se aratฤƒ mai jos.

Sample.html/Angular/1

Sample.html/Angular/2

Sample.html/Angular/3

Acest concept este cunoscut รฎn mod normal ca prezentarea unei imagini frumoase URL cฤƒtre utilizator.

Existฤƒ 2 paศ™i principali care trebuie efectuati pentru rutarea HTML5.

  1. Se configureazฤƒ $locationProvider
  2. Stabilirea bazei noastre pentru link-uri relative

Sฤƒ analizฤƒm รฎn detaliu cum se efectueazฤƒ paศ™ii menศ›ionaศ›i mai sus รฎn exemplul nostru.

Pas 1) Adฤƒugaศ›i codul relevant รฎn modulul Angular.

  1. Adauga o <base> etichetฤƒ la antetul documentului. Acest lucru este necesar pentru rutarea HTML5, astfel รฎncรขt aplicaศ›ia sฤƒ ศ™tie care este locaศ›ia de bazฤƒ a aplicaศ›iei.
  2. Adฤƒugaศ›i serviciul $locationProvider. Acest serviciu vฤƒ permite sฤƒ definiศ›i modul html5Mode.
  3. Setaศ›i html5Mode al serviciului $locationProvider la true.

Se activeazฤƒ rutarea HTML5

Pas 2) Eliminaศ›i toate etichetele # pentru linkuri (โ€žAngular/1โ€, โ€žAngular/2โ€, โ€žAngular/3โ€) pentru a crea elemente uศ™or de citit. URLs.

Se activeazฤƒ rutarea HTML5

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

โš ๏ธ Corecลฃie: originalul a declarat un baseUrl constantฤƒ care indicฤƒ o cale IDE localฤƒ, ceea ce nu are niciun efect asupra html5Mode. AngularJS citeศ™te locaศ›ia de bazฤƒ din <base href> etichetฤƒ. Originalul a fost injectat ศ™i $locationProvider fฤƒrฤƒ sฤƒ sun vreodatฤƒ html5Mode(true), deci hash-ul nu a fost niciodatฤƒ eliminat.

Dacฤƒ codul este executat cu succes, urmฤƒtorul rezultat va fi afiศ™at atunci cรขnd rulaศ›i codul รฎn browser.

ieศ™ire:

Se activeazฤƒ rutarea HTML5

Din ieศ™ire,

  • Puteศ›i vedea cฤƒ eticheta # nu este acolo cรขnd accesaศ›i aplicaศ›ia.

Tot ce este menศ›ionat mai sus foloseศ™te ngRoute, ruterul livrat de echipa AngularJS. Nu este singura opศ›iune, iar comparaศ›ia de mai jos explicฤƒ cรขnd alternativa este cea mai potrivitฤƒ.

ngRoute vs ui-router: Ce router sฤƒ alegeศ›i

ngRoute este รฎntreศ›inut de echipa AngularJS ศ™i se potriveศ™te cu un URL direct cฤƒtre un singur ศ™ablon ศ™i controler. ui-router este un proiect comunitar construit pentru a elimina principala limitare a ngRoute: se potriveศ™te la nivel de aplicaศ›ie de stat mai degrabฤƒ decรขt pe URL singur, ceea ce permite ca un ecran sฤƒ conศ›inฤƒ mai multe regiuni rutate independent.

Aspect ngRoute router interfaศ›ฤƒ utilizator
Serviciu de configurare $routeProvider Furnizor de $state
Meciuri pe URL Statul numit, URL facultativ
Vizualizฤƒri imbricate Nu este suportat Suportat
Vizualizฤƒri multiple pe ecran O singurฤƒ vizualizare ng Multe puncte de vรขnzare cu ui-view denumite
Rezolvare imbricatฤƒ Nu este suportat Stฤƒrile fiului moศ™tenesc rezolvฤƒrile pฤƒrintelui
Cel mai potrivit pentru Aplicaศ›ii plate, mici Tablouri de bord ศ™i machete stratificate

Alegeศ›i ngRoute cรขnd fiecare URL se mapeazฤƒ la o singurฤƒ vizualizare pe paginฤƒ รฎntreagฤƒ, deoarece nu necesitฤƒ dependenศ›e suplimentare ศ™i รฎntregul API se potriveศ™te pe o singurฤƒ paginฤƒ. Alegeศ›i ui-router atunci cรขnd un ecran are panouri care navigheazฤƒ independent sau cรขnd vizualizฤƒrile copil trebuie sฤƒ reutilizeze datele รฎncฤƒrcate de un pฤƒrinte. Migrarea ulterioarฤƒ este posibilฤƒ, dar nu trivialฤƒ, deoarece numele stฤƒrilor รฎnlocuiesc URL modele รฎn toate ศ™abloanele.

Erori comune de rutare AngularJS ศ™i cum sฤƒ le remediaศ›i

Majoritatea erorilor de rutare produc o eroare ng-view goalฤƒ รฎn loc de o eroare de consolฤƒ, ceea ce le face mai greu de diagnosticat decรขt ar trebui. Fiecare simptom de mai jos รฎศ™i numeศ™te cauza ศ™i remedierea.

  • Furnizor necunoscut: $routeProvider: angular-route.js nu a fost niciodatฤƒ รฎncฤƒrcat sau a fost รฎncฤƒrcat รฎnainte de angular.min.js. Referinศ›a cฤƒtre biblioteca principalฤƒ este mai รฎntรขi necesarฤƒ.
  • Vizualizarea rฤƒmรขne goalฤƒ fฤƒrฤƒ erori: niciun element nu poartฤƒ directiva ng-view, deci ศ™ablonul nu are unde sฤƒ fie randat.
  • Nimic nu se รฎncarcฤƒ la prima vizitฤƒ: Nicio rutฤƒ nu se potriveศ™te cu calea goalฤƒ. Adฤƒugaศ›i un bloc otherwise cu o valoare redirectTo.
  • `$routeParams` este gol: ศ˜ablonului รฎi lipseศ™te caracterul substituent pentru douฤƒ puncte. Trebuie sฤƒ fie โ€ž/Angular/:topicIdโ€.
  • ศ˜abloane 404 dupฤƒ html5Mode: configuraศ›i serverul sฤƒ rescrie cฤƒile nepotrivite cฤƒtre pagina de bazฤƒ ศ™i confirmaศ›i cฤƒ eticheta href de bazฤƒ este prezentฤƒ.
  • Controlerul nu porneศ™te niciodatฤƒ din nou: doar parametrul s-a modificat, aศ™a cฤƒ AngularJS a reutilizat instanศ›a controlerului รฎn loc sฤƒ o reconstruiascฤƒ. Ascultaศ›i evenimentul $routeUpdate รฎn loc sฤƒ vฤƒ bazaศ›i pe declanศ™area din nou a funcศ›iei controlerului.

รŽntrebฤƒri frecvente

`$routeParams` returneazฤƒ atรขt substituenศ›i de cale, cรขt ศ™i valori ale ศ™irurilor de interogare รฎmbinate รฎntr-un singur obiect. `$location.search()` returneazฤƒ doar ศ™irul de interogare. Foloseศ™te `$routeParams` รฎn interiorul controlerelor ศ™i `$location.search()` atunci cรขnd citeศ™ti sau scrii direct valori ale interogฤƒrii.

Da. Fฤƒrฤƒ hash, browserul trimite calea completฤƒ cฤƒtre server la o reรฎmprospฤƒtare sau la un link partajat. Serverul trebuie sฤƒ rescrie fiecare cale nepotrivitฤƒ รฎnapoi la pagina HTML de bazฤƒ, altfel linkurile directe returneazฤƒ eroarea 404.

AngularJS a ajuns la sfรขrศ™itul perioadei de funcศ›ionare รฎn decembrie 2021 ศ™i nu mai primeศ™te actualizฤƒri. ngRoute rฤƒmรขne potrivit pentru รฎntreศ›inerea aplicaศ›iilor AngularJS existente, dar proiectele noi ar trebui sฤƒ utilizeze รฎn schimb un framework acceptat รฎn prezent.

Da. AI Asistenศ›ii mapeazฤƒ fiecare bloc when la o intrare din matricea Routes ศ™i traduc cheile de rezolvare รฎn rezolvatori de rute. Revgestionarea manualฤƒ a guardiilor ศ™i a wildcard-urilor, deoarece cele douฤƒ routere trateazฤƒ diferit cฤƒile nepotrivite.

Instrumentele de inteligenศ›ฤƒ artificialฤƒ verificฤƒ cele trei cauze obiศ™nuite รฎn ordine: o dependenศ›ฤƒ ngRoute lipsฤƒ, un element ng-view absent ศ™i un model de rutฤƒ care nu corespunde cu URLDescrierea simptomului ศ™i lipirea blocului de configurare izoleazฤƒ de obicei eroarea.

Rezumaศ›i aceastฤƒ postare cu: