AngularJS ng-weergave met voorbeeld

โšก Slimme samenvatting

Views in AngularJS zorgen ervoor dat de inhoud van een pagina kan worden gewijzigd in plaats van dat er naar een andere pagina wordt genavigeerd. Dit geeft een single-page applicatie een 'directe' respons. De `ng-view` directive markeert het gebied dat elke route vervangt door een eigen template en controller.

  • ๐ŸชŸ Enkele plaatsaanduiding: Een element met `ng-view` geeft aan waar elke gerouteerde template wordt ingevoegd, en er is slechts รฉรฉn dergelijk element per pagina toegestaan.
  • ๐Ÿ”— Routekoppeling: Elke route bevat een templateUrl en een controller, waarmee de markup en logica voor die weergave aan elkaar worden gekoppeld.
  • ???? Moduleafhankelijkheid: Views vereisen angular-route.js en een expliciete afhankelijkheid van de ngRoute-module.
  • ๐ŸŽฏ Standaard weergave: De 'otherwise'-clausule stuurt elk niet-overeenkomend adres door, wat ervoor zorgt dat er bij de eerste keer laden een weergave wordt weergegeven.
  • ๐ŸŒ Server vereist: Sjablonen worden via HTTP opgehaald, dus de pagina moet worden aangeboden in plaats van vanuit het bestandssysteem te worden geopend.
  • โš ๏ธ Ondersteuningsstatus: AngularJS heeft op 31 december 2021 het einde van zijn levenscyclus bereikt en ontvangt geen verdere beveiligingsupdates meer.

AngularJS ng-view-richtlijn

Bekende locaties zoals Gmail Maak gebruik van het concept van Single Page Applications. Wanneer een gebruiker een andere pagina opvraagt, navigeert de applicatie niet weg; de weergave van de nieuwe pagina wordt binnen de bestaande pagina getoond, waardoor het lijkt alsof de gebruiker de applicatie nooit heeft verlaten. Hetzelfde effect wordt bereikt in AngularJS met behulp van views in combinatie met routes.

โš ๏ธ Ondersteuningsbericht: AngularJS bereikte einde levensduur op 31 december 2021 en ontvangt geen verdere patches of beveiligingsupdates. De onderstaande richtlijn blijft van toepassing voor het onderhouden van bestaande AngularJS 1.x-applicaties; in moderne gevallen Angular het equivalent is <router-outlet>.

Wat is een weergave?

Een weergave is de inhoud die aan de gebruiker wordt getoond. Wat de gebruiker ook wil zien, de bijbehorende weergave van de applicatie wordt getoond.

Door weergaven en routes te combineren, wordt een applicatie opgedeeld in logische weergaven en wordt elk daarvan gekoppeld aan een route. controleurwaardoor de applicatie beter beheersbaar wordt.

Stel je een bestelapplicatie voor waarin een klant bestellingen kan bekijken en nieuwe bestellingen kan plaatsen. Het onderstaande diagram laat zien hoe dit een single-page applicatie wordt.

Wat is een weergave

In plaats van twee aparte webpagina's, รฉรฉn voor 'Bestellingen bekijken' en รฉรฉn voor 'Nieuwe bestellingen', angularjs maakt gebruik van twee weergaven op dezelfde pagina, die via twee referentielinks bereikbaar zijn. #show en #new:

  • Navigeren naar MyApp/#show Toont de weergave 'Bestellingen bekijken' zonder de pagina te verlaten. Alleen dat gedeelte van de bestaande pagina wordt vernieuwd.
  • Navigeren naar MyApp/#new Doet hetzelfde voor het overzicht van nieuwe bestellingen.

Door een applicatie op deze manier in weergaven op te splitsen, blijft deze beheersbaar en gemakkelijk aan te passen. Elke weergave heeft een bijbehorende controller die de bedrijfslogica voor die functie bevat.

ng-view-richtlijn in AngularJS

De ngBekijk Richtlijnen complementeert de $route service door de weergegeven sjabloon van de huidige route in het hoofdlayoutbestand op te nemen, normaal gesproken index.html.

Telkens wanneer de huidige route verandert, verandert de bijbehorende weergave mee. $route configuratie, zonder dat de pagina zelf opnieuw wordt geladen. routes worden afzonderlijk behandeld; hier ligt de nadruk op het toevoegen van meerdere weergaven.

Het onderstaande stroomdiagram toont het hele proces, dat vervolgens in het voorbeeld stap voor stap wordt doorlopen.

ng-view-richtlijn in AngularJS

Hoe ng-view te implementeren in AngularJS

Dit voorbeeld biedt de gebruiker twee opties: een evenement weergeven en een evenement toevoegen. Klikken Voeg een evenement toe Dit toont de weergave 'Gebeurtenis toevoegen', en hetzelfde geldt voor 'Gebeurtenis weergeven'.

Stap 1) Voeg het angular-route-bestand toe als scriptreferentie. Dit bestand is vereist voor het gebruik van meerdere routes en weergaven en is beschikbaar op de AngularJS-website.

Voeg het angular-route-bestand toe.

Stap 2) Voeg de href-tags en de div-tag toe.

  1. Voeg href-tags toe die linken naar โ€œNieuw evenement toevoegenโ€ en โ€œEvenement weergevenโ€.
  2. Voeg een div toe die de inhoud bevat ng-view Een instructie om het weergavegebied te markeren. De bijbehorende weergave wordt daar ingevoegd wanneer op een van beide links wordt geklikt.

Voeg href-tags en div-tags toe.

Stap 3) Voeg de routingconfiguratie toe in de AngularJS-scripttag.

  1. Wanneer de gebruiker klikt op de Nieuw evenement link, AngularJS laadt add_event.html, injecteert zijn markup in de weergave en gebruikt AddEventController voor de bedrijfslogica.
  2. Wanneer de gebruiker klikt op de DisplayEvent link, het laadt show_event.html en gebruikt ShowDisplayController.
  3. De otherwise Deze clausule bepaalt de standaardweergave die aan de gebruiker wordt getoond, in dit geval DisplayEvent.

Routeringsconfiguratie

Stap 4) Voeg controllers toe om de bedrijfslogica voor beide functies te verwerken. Elke controller stelt eenvoudigweg een bericht in op het bijbehorende object, dat wordt weergegeven wanneer de corresponderende weergave wordt getoond.

Voeg controllers toe

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

โš ๏ธ Drie correcties op de oorspronkelijke advertentie. Ten eerste lezen de links #!NewEvent zonder schuine streep, terwijl de routes worden aangegeven als /NewEvent, dus er kwam niets overeen. Vanaf AngularJS 1.6 is het standaard hash-voorvoegsel !, wat het juiste adres oplevert #!/NewEvent โ€” een schuine streep na het uitroepteken. Ten tweede, ShowDisplayController Stel het bericht in op "Dit is een evenement weergeven", waarbij het woord ontbreekt. naar dat de omringende tekst citeert. Ten derde, lib/bootstrap.js Het bestand werd geladen vanaf een relatief pad dat nergens naartoe verwijst en nooit wordt gebruikt, daarom is het verwijderd.

Stap 5) Maak de pagina's aan add_event.html en show_event.htmlElk element bevat een header en een expressie die het bericht weergeeft dat door de controller is geรฏnjecteerd.

  • add_gebeurtenis.html

add_gebeurtenis.html

<h2>Add New Event</h2>

{{message}}
  • show_event.html

show_event.html

<h2>Show Event</h2>

{{message}}

Als de code succesvol wordt uitgevoerd, wordt de volgende uitvoer in de browser weergegeven.

Output:

ng-view uitvoer

ng-view uitvoer

Veelvoorkomende ng-view-fouten en hoe je ze kunt oplossen

Vrijwel elke fout bij het gebruik van ng-view komt voort uit de bedrading van de module, het adresformaat of de manier waarop de pagina wordt weergegeven, in plaats van uit de directive zelf.

  • Het weergavegebied blijft leeg: the ngRoute De module stond niet vermeld als afhankelijkheid, of angular-route.js was niet geladen. Beide zijn vereist en het script moet erna komen. angular.min.js.
  • Links wijzigen het adres, maar er wordt niets weergegeven: De href komt niet overeen met de route. Vanaf AngularJS 1.6 moet het adres voldoen aan de vereisten. #!/Route; oudere code geschreven voor versie 1.5 gebruikt #/Route.
  • Sjablonen kunnen niet worden geladen vanwege een CORS-fout: De pagina werd rechtstreeks vanaf de schijf geopend. Serveer deze via HTTP, omdat templateUrl Als het bestand via een AJAX-verzoek wordt opgehaald, blokkeert het bestandsprotocol.
  • Alleen de laatst weergegeven weergave verschijnt: Meer dan รฉรฉn element draagt โ€‹โ€‹de ng-view-eigenschap. AngularJS respecteert รฉรฉn weergavegebied per pagina.
  • Bij de eerste keer laden wordt niets weergegeven: geen otherwise De clausule is zo geconfigureerd dat een leeg adres niet overeenkomt met een route.

Veelgestelde vragen

Nee. ngRoute ondersteunt slechts รฉรฉn weergavegebied per pagina. Voor meerdere benoemde gebieden tegelijk kunt u de ui-router-bibliotheek gebruiken, die ui-view biedt en geneste en sibling-weergaven ondersteunt.

Schakel de HTML5-modus in met $locationProvider.html5Mode(true) en voeg een basistag toe. De server moet dan onbekende paden herschrijven naar index.html, anders geeft een vernieuwing een 404-foutmelding.

Grotendeels. AI De tools converteren routetabellen naar Angular Routes-arrays en vervangen ng-view door router-outlet. Controllers moeten echter nog steeds handmatig als componenten worden herschreven.

AI-assistenten controleren snel de drie meest voorkomende oorzaken: een ontbrekende ngRoute-afhankelijkheid, een hash-prefix die niet overeenkomt met de route en een sjabloonpad dat de browser niet kan ophalen.

Ja. Voeg een toe resolve AngularJS blokkeert de route. AngularJS wacht tot die beloftes zijn afgehandeld voordat de controller wordt geรฏnstantieerd. Dit voorkomt dat de weergave even leeg verschijnt terwijl de gegevens binnenkomen.

Vat dit bericht samen met: