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.

  • ๐ŸชŸ Enkelt pladsholder: Et element med ng-view-mรฆrker, hvor alle rutede skabeloner injiceres, og kun รฉt sรฅdant element er tilladt pr. side.
  • ๐Ÿ”— Ruteparring: Hver rute navngiver en templateUrl og en controller, der binder markup og logik sammen for den pรฅgรฆldende visning.
  • ๐Ÿ“ฆ Modulafhรฆngighed: Visninger krรฆver angular-route.js plus en deklareret afhรฆngighed af ngRoute-modulet.
  • ๐ŸŽฏ Standardvisning: "Otherwise"-klausulen omdirigerer enhver uoverensstemmende adresse, hvilket er det, der gengiver en visning ved fรธrste indlรฆsning.
  • ๐ŸŒ Server nรธdvendig: Skabeloner hentes via HTTP, sรฅ siden skal serveres i stedet for at รฅbnes fra filsystemet.
  • โš ๏ธ Supportstatus: AngularJS nรฅede slutningen af โ€‹โ€‹sin levetid den 31. december 2021 og modtager ikke yderligere sikkerhedsrettelser.

AngularJS ng-view-direktiv

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.

Hvad er en udsigt

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/#show viser visningen Vis ordrer uden at forlade siden. Kun den del af den eksisterende side opdateres.
  • Navigerer til MyApp/#new gรธ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.

ng-view direktiv i AngularJS

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.

Inkluder angular-route-filen

Trin 2) Tilfรธj href-taggene og div-tagget.

  1. Tilfรธj href-tags, der linker til "Tilfรธj ny begivenhed" og "Vis begivenhed".
  2. Tilfรธj en div, der bรฆrer ng-view direktiv til at markere visningsomrรฅdet. Den matchende visning indsรฆttes der, hver gang der klikkes pรฅ et af linkene.

Tilfรธj href-tags og div-tag

Trin 3) Tilfรธj routingkonfigurationen i AngularJS-scripttagget.

  1. Nรฅr brugeren klikker pรฅ Ny begivenhed link, AngularJS indlรฆses add_event.html, indsรฆtter sin markup i visningen og bruger AddEventController for forretningslogikken.
  2. Nรฅr brugeren klikker pรฅ Visningshรฆndelse link, det indlรฆses show_event.html og anvendelser ShowDisplayController.
  3. otherwise Klausulen angiver standardvisningen, der vises for brugeren, hvilket her er DisplayEvent.

Routingkonfiguration

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.

Tilfรธj controllere

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

add_event.html

<h2>Add New Event</h2>

{{message}}
  • show_event.html

show_event.html

<h2>Show Event</h2>

{{message}}

Hvis koden udfรธres korrekt, vises fรธlgende output i browseren.

Output:

ng-view-output

ng-view-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 ngRoute modulet blev ikke angivet som en afhรฆngighed, eller angular-route.js blev ikke indlรฆst. Begge er pรฅkrรฆvede, og scriptet skal komme efter angular.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 templateUrl hentes 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 otherwise klausulen er konfigureret, sรฅ en tom adresse matcher ingen rute.

Ofte Stillede Spรธrgsmรฅl

Nej. ngRoute understรธtter et enkelt visningsomrรฅde pr. side. For flere navngivne omrรฅder pรฅ รฉn gang skal du bruge ui-router-biblioteket, som leverer ui-view og understรธtter indbyggede og sidestillede visninger.

Aktivรฉr HTML5-tilstand med $locationProvider.html5Mode(true) og tilfรธj et basistag. Serveren skal derefter omskrive ukendte stier til index.html, ellers returnerer en opdatering en 404.

Stort set. AI Vรฆrktรธjer konverterer rutetabeller til Angular Routes-arrays og bytter ng-view ud med router-outlet. Controllere skal stadig omskrives som komponenter i hรฅnden.

AI-assistenter tjekker hurtigt de tre sรฆdvanlige mistรฆnkte: en manglende ngRoute-afhรฆngighed, et hash-prรฆfiks, der ikke matcher ruten, og en skabelonsti, som browseren ikke kan hente.

Ja. Tilfรธj en resolve blok til ruten. AngularJS venter pรฅ, at disse lรธfter afvikles, fรธr controlleren instantieres, hvilket undgรฅr, at en visning blinker tom, mens data ankommer.

Opsummer dette indlรฆg med: