AngularJS ng-view s primjerom
โก Pametni saลพetak
Prikazi u AngularJS-u omoguฤuju jednoj stranici da zamijeni svoj sadrลพaj umjesto da se odmiฤe, ลกto ฤini da se aplikacija s jednom stranicom osjeฤa trenutno. Direktiva ng-view oznaฤava regiju koju svaka ruta zamjenjuje vlastitim predloลกkom i kontrolerom.

Poznate stranice kao ลกto su Gmail Koristite koncept aplikacija s jednom stranicom. Kada korisnik zatraลพi drugu stranicu, aplikacija ne napuลกta stranicu; prikazuje pogled nove stranice unutar postojeฤe stranice, tako da se ฤini kao da korisnik nikada nije ni otiลกao. Isto se postiลพe u AngularJS-u koriลกtenjem pogleda zajedno s rutama.
โ ๏ธ Obavijest za podrลกku: AngularJS dosegnut kraj ลพivotnog vijeka 31. prosinca 2021. i ne prima daljnje zakrpe ili sigurnosne ispravke. Donja direktiva ostaje toฤna za odrลพavanje postojeฤih AngularJS 1.x aplikacija; u modernom Kutni ekvivalent je <router-outlet>.
ล to je pogled?
Prikaz je sadrลพaj koji se prikazuje korisniku. ล to god korisnik ลพeli vidjeti, prikazuje se odgovarajuฤi prikaz aplikacije.
Kombiniranjem pogleda i ruta aplikacija se dijeli na logiฤke poglede i svaki se veลพe na kontrolor, ลกto aplikaciju ฤini lakลกom za upravljanje.
Pretpostavimo aplikaciju za naruฤivanje u kojoj kupac moลพe pregledavati narudลพbe i slati nove. Dijagram u nastavku prikazuje kako ona postaje aplikacija s jednom stranicom.
Umjesto dvije odvojene web stranice, jedne za "Pregled narudลพbi" i jedne za "Nove narudลพbe", AngularJS koristi dva prikaza na istoj stranici, do kojih se dolazi putem dvije referentne poveznice, #show i #new:
- Navigacija do
MyApp/#showprikazuje prikaz Narudลพbe bez napuลกtanja stranice. Osvjeลพava se samo taj dio postojeฤe stranice. - Navigacija do
MyApp/#newฤini isto za prikaz Nove narudลพbe.
Razdvajanje aplikacije na prikaze na ovaj naฤin omoguฤuje joj upravljanje i jednostavnu promjenu, a svaki prikaz ima odgovarajuฤi kontroler koji sadrลพi poslovnu logiku za tu funkciju.
Direktiva ng-view u AngularJS
The ngView Direktiva dopunjuje $route usluga ukljuฤivanjem iscrtanog predloลกka trenutne rute u glavnu datoteku izgleda, obiฤno index.html.
Svaki put kada se trenutna ruta promijeni, ukljuฤeni prikaz se mijenja s njom u skladu s $route konfiguraciju, bez ponovnog uฤitavanja same stranice. Rute obraฤuju se zasebno; ovdje je fokus na dodavanju viลกe prikaza.
Dijagram toka u nastavku prikazuje cijeli proces, koji primjer zatim korak po korak opisuje.
Kako implementirati ng-view u AngularJS
Ovaj primjer korisniku nudi dvije moguฤnosti: prikaz dogaฤaja i dodavanje dogaฤaja. Klikom na Dodaj dogaฤaj prikazuje prikaz Dodaj dogaฤaj, a isto vrijedi i za Prikaz dogaฤaja.
Korak 1) Ukljuฤite datoteku angular-route kao referencu skripte. Ova datoteka je potrebna za koriลกtenje viลกe ruta i prikaza i dostupna je na AngularJS stranici.
Korak 2) Dodajte oznake href i oznaku div.
- Dodajte href oznake koje povezuju na "Dodaj novi dogaฤaj" i "Prikaลพi dogaฤaj".
- Dodajte div koji nosi
ng-viewdirektiva za oznaฤavanje podruฤja prikaza. Odgovarajuฤi prikaz ubrizgava se tamo svaki put kada se klikne na bilo koju vezu.
Korak 3) U oznaci AngularJS skripte dodajte konfiguraciju usmjeravanja.
- Kada korisnik klikne na Novi dogaฤaj link, AngularJS se uฤitava
add_event.html, ubrizgava svoje oznake u prikaz i koristiAddEventControllerza poslovnu logiku. - Kada korisnik klikne na Dogaฤaj prikaza link, uฤitava se
show_event.htmli koristiShowDisplayController. - The
otherwiseKlauzula postavlja zadani prikaz koji se prikazuje korisniku, ลกto je ovdje DisplayEvent.
Korak 4) Dodajte kontrolere za obradu poslovne logike za obje funkcije. Svaki jednostavno postavlja poruku na svoj objekt opsega, koja se prikazuje kada se prikaลพe odgovarajuฤi prikaz.
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Event Registration</title> <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> </head> <body ng-app="sampleApp"> <h1>Guru99 Global Event</h1> <div class="container"> <ul> <li><a href="#!/NewEvent">Add New Event</a></li> <li><a href="#!/DisplayEvent">Display Event</a></li> </ul> <div ng-view></div> </div> <script> var app = angular.module('sampleApp', ["ngRoute"]); app.config(function($routeProvider) { $routeProvider .when("/NewEvent", { templateUrl: "add_event.html", controller: "AddEventController" }) .when("/DisplayEvent", { templateUrl: "show_event.html", controller: "ShowDisplayController" }) .otherwise({ redirectTo: '/DisplayEvent' }); }); app.controller("AddEventController", function($scope) { $scope.message = "This is to Add a new Event"; }); app.controller("ShowDisplayController", function($scope) { $scope.message = "This is to display an Event"; }); </script> </body> </html>
โ ๏ธ Tri ispravka originalnog popisa. Prvo, linkovi glase #!NewEvent bez kose crte dok su rute deklarirane kao /NewEvent, tako da se niลกta nije podudaralo. Od AngularJS-a 1.6 zadani prefiks hash-a je !, ลกto ฤini ispravnu adresu #!/NewEvent โ kosa crta iza uskliฤnika. Drugo, ShowDisplayController postavite poruku na "Ovo je prikaz dogaฤaja", pri ฤemu nedostaje rijeฤ do koje okolni tekst citira. Treฤe, lib/bootstrap.js uฤitan je s relativne putanje koja se nigdje ne rjeลกava i nikada se ne koristi, pa je uklonjen.
Korak 5) Izradite stranice add_event.html i show_event.htmlSvaki sadrลพi zaglavlje i izraz koji prikazuje poruku koju je ubrizgao njegov kontroler.
- add_event.html
<h2>Add New Event</h2> {{message}}
- show_event.html
<h2>Show Event</h2> {{message}}
Ako je kod uspjeลกno izvrลกen, u pregledniku se prikazuje sljedeฤi izlaz.
Izlaz:
Uobiฤajene greลกke u ng-viewu i kako ih ispraviti
Gotovo svaki kvar ng-viewa dolazi od oลพiฤenja modula, formata adrese ili naฤina na koji se stranica posluลพuje, a ne od same direktive.
- Podruฤje prikaza ostaje prazno: o
ngRoutemodul nije bio naveden kao ovisnost iliangular-route.jsnije uฤitan. Oba su obavezna, a skripta mora doฤi nakonangular.min.js. - Linkovi mijenjaju adresu, ali niลกta se ne prikazuje: href ne odgovara ruti. Iz AngularJS-a 1.6 adresa treba
#!/Route; koriลกten je stariji kod napisan za verziju 1.5#/Route. - Predloลกci se ne mogu uฤitati zbog CORS greลกke: Stranica je otvorena izravno s diska. Posluลพite je putem HTTP-a, jer
templateUrldohvaฤa se AJAX zahtjevom, blokovi protokola datoteke. - Pojavljuje se samo posljednji prikaz: Viลกe od jednog elementa nosi ng-view. AngularJS poลกtuje jedno podruฤje prikaza po stranici.
- Niลกta se ne prikazuje pri prvom uฤitavanju: Ne
otherwiseklauzula je konfigurirana tako da prazna adresa ne odgovara nijednoj ruti.










