AngularJS ng-visning med eksempel

โšก Smart oppsummering

Visninger i AngularJS lar รฉn side bytte innhold i stedet for รฅ navigere bort, noe som gjรธr at en applikasjon med รฉn side fรธles umiddelbar. ng-view-direktivet markerer regionen som hver rute erstatter med sin egen mal og kontroller.

  • ๐ŸชŸ Enkel plassholder: Ett element som bรฆrer ng-view-merker der hver rutede mal injiseres, og bare ett slikt element er tillatt per side.
  • ๐Ÿ”— Ruteparing: Hver rute navngir en templateUrl og en kontroller, som binder markup og logikk sammen for den visningen.
  • ๐Ÿ“ฆ Modulavhengighet: Visninger krever angular-route.js pluss en deklarert avhengighet av ngRoute-modulen.
  • ๐ŸŽฏ Standardvisning: Klausulen *otherson* omdirigerer enhver ikke-samsvarende adresse, som er det som gjengir en visning ved fรธrste innlasting.
  • ๐ŸŒ Server nรธdvendig: Maler hentes via HTTP, sรฅ siden mรฅ serveres i stedet for รฅ รฅpnes fra filsystemet.
  • โš ๏ธ Stรธttestatus: AngularJS nรฅdde slutten av sin levetid 31. desember 2021 og mottar ingen ytterligere sikkerhetsoppdateringer.

AngularJS ng-view-direktiv

Kjente nettsteder som f.eks. Gmail bruk konseptet med enkeltsideapplikasjoner. Nรฅr en bruker ber om en annen side, navigerer ikke applikasjonen bort; den viser visningen av den nye siden inne i den eksisterende siden, slik at det fรธles som om brukeren aldri har forlatt den. Det samme oppnรฅs i AngularJS ved รฅ bruke visninger sammen med ruter.

โš ๏ธ Stรธttemelding: AngularJS nรฅdde levetidens slutt 31. desember 2021 og mottar ingen ytterligere oppdateringer eller sikkerhetsrettelser. Direktivet nedenfor forblir nรธyaktig for vedlikehold av eksisterende AngularJS 1.x-applikasjoner; i moderne Vinkel ekvivalenten er <router-outlet>.

Hva er en visning?

En visning er innholdet som vises til brukeren. Uansett hva brukeren รธnsker รฅ se, vises den samsvarende visningen av applikasjonen.

ร… kombinere visninger og ruter deler en applikasjon inn i logiske visninger og binder hver av dem til en controller, noe som gjรธr applikasjonen mer hรฅndterbar.

La oss anta et bestillingsprogram der en kunde kan se bestillinger og legge inn nye. Diagrammet nedenfor viser hvordan det blir et enkeltsides program.

Hva er en visning

I stedet for to separate nettsider, รฉn for ยซVis bestillingerยป og รฉn for ยซNye bestillingerยป, AngularJS bruker to visninger pรฅ samme side, nรฅdd via to referanselenker, #show og #new:

  • Navigerer til MyApp/#show viser visningen Vis bestillinger uten รฅ forlate siden. Bare den delen av den eksisterende siden oppdateres.
  • Navigerer til MyApp/#new gjรธr det samme for visningen Nye ordrer.

ร… dele en applikasjon inn i visninger pรฅ denne mรฅten gjรธr den hรฅndterbar og enkel รฅ endre, og hver visning har en tilsvarende kontroller som inneholder forretningslogikken for den funksjonen.

ng-view-direktivet i AngularJS

Ocuco ngView Direktiver utfyller $route tjenesten ved รฅ inkludere den gjengitte malen for gjeldende rute i hovedlayoutfilen, vanligvis index.html.

Hver gang den gjeldende ruten endres, endres den inkluderte visningen med den i henhold til $route konfigurasjon, uten at selve siden lastes inn pรฅ nytt. ruter dekkes separat; her er fokuset รฅ legge til flere visninger.

Flytskjemaet nedenfor viser hele prosessen, som eksemplet deretter gรฅr gjennom trinn for trinn.

ng-view-direktivet i AngularJS

Hvordan implementere ng-view i AngularJS

Dette eksemplet presenterer to alternativer for brukeren: vise en hendelse og legge til en hendelse. Ved รฅ klikke Legg til en hendelse viser Legg til hendelse-visningen, og det samme gjelder for Vis hendelse.

Trinn 1) Inkluder angular-route-filen som en skriptreferanse. Denne filen er nรธdvendig for รฅ bruke flere ruter og visninger, og er tilgjengelig fra AngularJS-nettstedet.

Inkluder angular-route-filen

Trinn 2) Legg til href-taggene og div-taggen.

  1. Legg til href-tagger som lenker til ยซLegg til ny hendelseยป og ยซVis hendelseยป.
  2. Legg til en div som bรฆrer ng-view direktiv for รฅ markere visningsomrรฅdet. Den samsvarende visningen injiseres der hver gang en av lenkene klikkes.

Legg til href-tagger og div-tagger

Trinn 3) Legg til rutingskonfigurasjonen i AngularJS-skripttaggen.

  1. Nรฅr brukeren klikker pรฅ Ny hendelse lenke, AngularJS laster add_event.html, injiserer markupen sin i visningen og bruker AddEventController for forretningslogikken.
  2. Nรฅr brukeren klikker pรฅ Visningshendelse lenke, den laster show_event.html og bruker ShowDisplayController.
  3. Ocuco otherwise klausulen angir standardvisningen som vises til brukeren, som her er DisplayEvent.

Rutingskonfigurasjon

Trinn 4) Legg til kontrollere for รฅ behandle forretningslogikken for begge funksjonene. Hver av dem setter ganske enkelt en melding pรฅ sitt omfangsobjekt, som vises nรฅr den samsvarende visningen vises.

Legg til kontrollere

<!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 opprinnelige oppfรธringen. Fรธrst leses lenkene #!NewEvent uten skrรฅstrek mens rutene er deklarert som /NewEvent, sรฅ ingenting samsvarte. Fra AngularJS 1.6 er standard hash-prefiks !, som gjรธr den riktige adressen #!/NewEvent โ€” en skrรฅstrek etter utropstegnet. For det andre, ShowDisplayController Sett meldingen til ยซDette viser en hendelseยป, og utgรฅ av ordet til som den omkringliggende teksten siterer. For det tredje, lib/bootstrap.js ble lastet inn fra en relativ sti som ikke lรธses noe sted og aldri brukes, sรฅ den har blitt fjernet.

Trinn 5) Lag sidene add_event.html og show_event.htmlHver inneholder en header og et uttrykk som viser meldingen som injiseres av kontrolleren.

  • 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 kjรธres uten problemer, vises fรธlgende utdata i nettleseren.

Utgang:

ng-view-utdata

ng-view-utdata

Vanlige ng-view-feil og hvordan du fikser dem

Nesten alle ng-view-feil kommer fra modulens kabling, adresseformatet eller mรฅten siden blir servert pรฅ, snarere enn fra selve direktivet.

  • Visningsomrรฅdet forblir tomt: de ngRoute modulen ble ikke oppfรธrt som en avhengighet, eller angular-route.js ble ikke lastet inn. Begge er obligatoriske, og skriptet mรฅ komme etter angular.min.js.
  • Lenker endrer adressen, men ingenting gjengis: href-en samsvarer ikke med ruten. Fra AngularJS 1.6 trenger adressen #!/Route; eldre kode skrevet for 1.5 brukt #/Route.
  • Maler lastes ikke inn med en CORS-feil: siden ble รฅpnet direkte fra disken. Server den over HTTP, fordi templateUrl hentes av en AJAX-forespรธrsel filprotokollblokkene.
  • Bare den siste visningen vises: Mer enn ett element bรฆrer ng-view. AngularJS bruker ett enkelt visningsomrรฅde per side.
  • Ingenting vises ved fรธrste opplading: Nei. otherwise klausulen er konfigurert, slik at en tom adresse ikke samsvarer med noen rute.

Spรธrsmรฅl og svar

Nei. ngRoute stรธtter ett enkelt visningsomrรฅde per side. For flere navngitte omrรฅder samtidig, bruk ui-router-biblioteket, som tilbyr ui-view og stรธtter nestede og sidestilte visninger.

Aktiver HTML5-modus med $locationProvider.html5Mode(true) og legg til en basiskode. Serveren mรฅ deretter omskrive ukjente stier til index.html, ellers returnerer en oppdatering en 404.

I stor grad. AI Verktรธy konverterer rutetabeller til Angular Routes-arrayer og bytter ng-view med router-outlet. Kontrollere mรฅ fortsatt skrives om som komponenter manuelt.

AI-assistenter sjekker de tre vanlige mistenkte raskt: en manglende ngRoute-avhengighet, et hash-prefiks som ikke samsvarer med ruten, og en malbane som nettleseren ikke kan hente.

Ja. Legg til en resolve blokk til ruten. AngularJS venter pรฅ at disse lรธftene skal innfris fรธr kontrolleren instansieres, noe som unngรฅr at visningen blinker tom mens data ankommer.

Oppsummer dette innlegget med: