AngularJS ng-view med Eksempel
โก Smart opsummering
Views i AngularJS lader รฉn side udskifte sit indhold i stedet for at navigere vรฆk, hvilket er det, der fรฅr en applikation med รฉn side til at fรธles รธjeblikkelig. ng-view-direktivet markerer den region, som hver rute erstatter, med sin egen skabelon og controller.

Kendte steder som f.eks. Gmail Brug konceptet med Single Page Applications. Nรฅr en bruger anmoder om en anden side, navigerer applikationen ikke vรฆk; den viser visningen af โโden nye side inde i den eksisterende side, sรฅ det fรธles som om brugeren aldrig har forladt den. Det samme opnรฅs i AngularJS ved hjรฆlp af views sammen med routes.
โ ๏ธ Supportmeddelelse: AngularJS nรฅet levetidens afslutning den 31. december 2021 og modtager ingen yderligere programrettelser eller sikkerhedsrettelser. Direktivet nedenfor forbliver korrekt til vedligeholdelse af eksisterende AngularJS 1.x-applikationer; i moderne Vinkelforskydning det tilsvarende er <router-outlet>.
Hvad er en visning?
En visning er det indhold, der vises til brugeren. Uanset hvad brugeren รธnsker at se, vises den matchende visning af applikationen.
Kombination af visninger og ruter opdeler en applikation i logiske visninger og binder hver af dem til en controller, hvilket gรธr applikationen mere overskuelig.
Forestil dig en bestillingsapplikation, hvor en kunde kan se ordrer og afgive nye. Diagrammet nedenfor viser, hvordan det bliver en enkeltsidet applikation.
I stedet for to separate websider, รฉn til "Se ordrer" og รฉn til "Nye ordrer", AngularJS bruger to visninger pรฅ samme side, der nรฅs via to referencelinks, #show og #new:
- Navigerer til
MyApp/#showviser visningen Vis ordrer uden at forlade siden. Kun den del af den eksisterende side opdateres. - Navigerer til
MyApp/#newgรธr det samme for visningen Nye ordrer.
Ved at opdele en applikation i visninger pรฅ denne mรฅde bliver den overskuelig og nem at รฆndre, og hver visning har en tilsvarende controller, der indeholder forretningslogikken for den pรฅgรฆldende funktion.
ng-view direktiv i AngularJS
ngView Direktiv supplerer $route tjenesten ved at inkludere den gengivne skabelon for den aktuelle rute i hovedlayoutfilen, normalt index.html.
Hver gang den aktuelle rute รฆndres, รฆndres den inkluderede visning med den i henhold til $route konfiguration, uden at selve siden genindlรฆses. Ruter dรฆkkes separat; her er fokus pรฅ at tilfรธje flere visninger.
Flowchartet nedenfor viser hele processen, som eksemplet derefter gennemgรฅr trin for trin.
Sรฅdan implementeres ng-view i AngularJS
Dette eksempel prรฆsenterer brugeren for to muligheder: visning af en begivenhed og tilfรธj en begivenhed. Ved at klikke pรฅ Tilfรธj en begivenhed viser visningen Tilfรธj begivenhed, og det samme gรฆlder for Vis begivenhed.
Trin 1) Inkluder angular-route-filen som en scriptreference. Denne fil er nรธdvendig for at bruge flere ruter og visninger, og er tilgรฆngelig fra AngularJS-webstedet.
Trin 2) Tilfรธj href-taggene og div-tagget.
- Tilfรธj href-tags, der linker til "Tilfรธj ny begivenhed" og "Vis begivenhed".
- Tilfรธj en div, der bรฆrer
ng-viewdirektiv til at markere visningsomrรฅdet. Den matchende visning indsรฆttes der, hver gang der klikkes pรฅ et af linkene.
Trin 3) Tilfรธj routingkonfigurationen i AngularJS-scripttagget.
- Nรฅr brugeren klikker pรฅ Ny begivenhed link, AngularJS indlรฆses
add_event.html, indsรฆtter sin markup i visningen og brugerAddEventControllerfor forretningslogikken. - Nรฅr brugeren klikker pรฅ Visningshรฆndelse link, det indlรฆses
show_event.htmlog anvendelserShowDisplayController. -
otherwiseKlausulen angiver standardvisningen, der vises for brugeren, hvilket her er DisplayEvent.
Trin 4) Tilfรธj controllere til at behandle forretningslogikken for begge funktioner. Hver funktion angiver blot en besked pรฅ sit scope-objekt, der vises, nรฅr den matchende visning vises.
<!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>
โ ๏ธ Tre rettelser til den oprindelige annonce. Fรธrst lรฆses linkene #!NewEvent uden skrรฅstreg, mens ruterne er angivet som /NewEvent, sรฅ intet matchede. Fra AngularJS 1.6 er standard hash-prรฆfikset !, hvilket gรธr den korrekte adresse #!/NewEvent โ en skrรฅstreg efter udrรฅbstegnet. For det andet, ShowDisplayController Sรฆt beskeden til "Dette viser en begivenhed", og udelad ordet til som den omgivende tekst citerer. For det tredje, lib/bootstrap.js blev indlรฆst fra en relativ sti, der ikke findes nogen steder og aldrig bruges, sรฅ den er blevet fjernet.
Trin 5) Opret siderne add_event.html og show_event.htmlHver indeholder en header og et udtryk, der viser den besked, der injiceres af dens controller.
- add_event.html
<h2>Add New Event</h2> {{message}}
- show_event.html
<h2>Show Event</h2> {{message}}
Hvis koden udfรธres korrekt, vises fรธlgende output i browseren.
Output:
Almindelige ng-view-fejl og hvordan man retter dem
Nรฆsten alle ng-view-fejl stammer fra modulets ledningsfรธring, adresseformatet eller den mรฅde, siden vises pรฅ, snarere end fra selve direktivet.
- Visningsomrรฅdet forbliver tomt: og
ngRoutemodulet blev ikke angivet som en afhรฆngighed, ellerangular-route.jsblev ikke indlรฆst. Begge er pรฅkrรฆvede, og scriptet skal komme efterangular.min.js. - Links รฆndrer adressen, men intet gengives: href'en matcher ikke ruten. Fra AngularJS 1.6 skal adressen
#!/Route; รฆldre kode skrevet til 1.5 brugt#/Route. - Skabeloner kan ikke indlรฆses med en CORS-fejl: Siden blev รฅbnet direkte fra disken. Vis den via HTTP, fordi
templateUrlhentes af en AJAX-anmodning filprotokolblokkene. - Kun den sidste visning vises nogensinde: mere end รฉt element bรฆrer ng-view. AngularJS bruger et enkelt visningsomrรฅde pr. side.
- Intet vises ved fรธrste indlรฆsning: ingen
otherwiseklausulen er konfigureret, sรฅ en tom adresse matcher ingen rute.










