AngularJS ng-view mit Beispiel

โšก Intelligente Zusammenfassung

Views in AngularJS ermรถglichen es, den Inhalt einer Seite auszutauschen, anstatt die Seite zu verlassen. Dadurch fรผhlt sich eine Single-Page-Anwendung sofort an. Die ng-view-Direktive markiert den Bereich, den jede Route durch ihre eigene Vorlage und ihren eigenen Controller ersetzt.

  • ๐ŸชŸ Einzelner Platzhalter: Ein Element, das ng-view-Markierungen enthรคlt, an denen jede geroutete Vorlage eingefรผgt wird, und nur ein solches Element ist pro Seite zulรคssig.
  • ๐Ÿ”— Routenpaarung: Jede Route benennt eine templateUrl und einen Controller und verknรผpft so Markup und Logik fรผr diese Ansicht.
  • ๐Ÿ“ฆ Modulabhรคngigkeit: Views benรถtigen angular-route.js sowie eine deklarierte Abhรคngigkeit vom ngRoute-Modul.
  • ๐ŸŽฏ Standardansicht: Die โ€žotherwiseโ€œ-Klausel leitet jede nicht รผbereinstimmende Adresse um, wodurch beim ersten Laden eine Ansicht gerendert wird.
  • ๐ŸŒ Server erforderlich: Die Templates werden รผber HTTP abgerufen, daher muss die Seite bereitgestellt und kann nicht aus dem Dateisystem geรถffnet werden.
  • โš ๏ธ Support-Status: AngularJS hat am 31. Dezember 2021 das Ende seines Lebenszyklus erreicht und erhรคlt keine weiteren Sicherheitsupdates mehr.

AngularJS ng-view-Direktive

Bekannte Seiten wie zum Beispiel Gmail Das Konzept der Single-Page-Anwendung (SPA) wird genutzt. Fordert ein Benutzer eine andere Seite an, navigiert die Anwendung nicht weg, sondern zeigt die Ansicht der neuen Seite innerhalb der bestehenden Seite an. Dadurch entsteht der Eindruck, der Benutzer habe die Anwendung nie verlassen. Dasselbe wird in AngularJS mithilfe von Views und Routen erreicht.

โš ๏ธ Supporthinweis: AngularJS hat erreicht Lebensende am 31. Dezember 2021 und erhรคlt keine weiteren Patches oder Sicherheitskorrekturen. Die folgende Anweisung bleibt fรผr die Wartung bestehender AngularJS 1.x-Anwendungen gรผltig; in modernen Angular Das ร„quivalent ist <router-outlet>.

Was ist eine Ansicht?

Eine Ansicht ist der Inhalt, der dem Benutzer angezeigt wird. Was auch immer der Benutzer sehen mรถchte, die entsprechende Ansicht der Anwendung wird angezeigt.

Durch die Kombination von Ansichten und Routen wird eine Anwendung in logische Ansichten unterteilt und jede einzelne an eine Route gebunden. Controller, wodurch die Anwendung besser handhabbar wird.

Angenommen, wir haben eine Bestellanwendung, in der Kunden Bestellungen einsehen und neue aufgeben kรถnnen. Das folgende Diagramm zeigt, wie daraus eine Single-Page-Anwendung wird.

Was ist eine Ansicht?

Statt zweier separater Webseiten, eine fรผr โ€žBestellungen anzeigenโ€œ und eine fรผr โ€žNeue Bestellungenโ€œ, AngularJS nutzt zwei Ansichten auf derselben Seite, die รผber zwei Verweislinks erreichbar sind. #show und #new:

  • Navigieren zu MyApp/#show Die Ansicht โ€žBestellungen anzeigenโ€œ wird angezeigt, ohne dass die Seite verlassen werden muss. Nur dieser Abschnitt der aktuellen Seite wird aktualisiert.
  • Navigieren zu MyApp/#new Dasselbe gilt fรผr die Ansicht โ€žNeue Auftrรคgeโ€œ.

Durch die Aufteilung einer Anwendung in Ansichten bleibt sie รผbersichtlich und leicht รคnderbar, und jede Ansicht verfรผgt รผber einen entsprechenden Controller, der die Geschรคftslogik fรผr diese Funktion enthรคlt.

ng-view-Direktive in AngularJS

Das ngView Richtlinien ergรคnzt die $route Der Service wird durch Einbindung der gerenderten Vorlage der aktuellen Route in die Hauptlayoutdatei bereitgestellt, normalerweise index.html.

Jedes Mal, wenn sich die aktuelle Route รคndert, รคndert sich auch die zugehรถrige Ansicht entsprechend. $route Konfiguration, ohne dass die Seite selbst neu geladen wird. Routen werden separat behandelt; hier liegt der Schwerpunkt auf dem Hinzufรผgen mehrerer Ansichten.

Das untenstehende Flussdiagramm zeigt den gesamten Prozess, der im Beispiel dann Schritt fรผr Schritt erlรคutert wird.

ng-view-Direktive in AngularJS

So implementieren Sie ng-view in AngularJS

Dieses Beispiel bietet dem Benutzer zwei Optionen: ein Ereignis anzeigen und ein Ereignis hinzufรผgen. Klicken Fรผgen Sie ein Ereignis hinzu zeigt die Ansicht "Ereignis hinzufรผgen" an, und dasselbe gilt fรผr die Ansicht "Ereignis anzeigen".

Schritt 1) Fรผgen Sie die Datei angular-route als Skriptreferenz hinzu. Diese Datei wird benรถtigt, um mehrere Routen und Ansichten zu verwenden, und ist auf der AngularJS-Website verfรผgbar.

Fรผgen Sie die angular-route-Datei hinzu.

Schritt 2) Fรผge die href-Tags und das div-Tag hinzu.

  1. Fรผgen Sie href-Tags hinzu, die auf โ€žNeues Ereignis hinzufรผgenโ€œ und โ€žEreignis anzeigenโ€œ verlinken.
  2. Fรผge ein Div-Element hinzu, das den Inhalt enthรคlt. ng-view Anweisung zum Markieren des Ansichtsbereichs. Die entsprechende Ansicht wird dort eingefรผgt, sobald einer der Links angeklickt wird.

Fรผgen Sie href-Tags und div-Tags hinzu.

Schritt 3) Fรผgen Sie im AngularJS-Skript-Tag die Routing-Konfiguration hinzu.

  1. Wenn der Benutzer auf die Neues Ereignis Link, AngularJS lรคdt add_event.html, fรผgt sein Markup in die Ansicht ein und verwendet AddEventController fรผr die Geschรคftslogik.
  2. Wenn der Benutzer auf die DisplayEvent Link, er lรคdt show_event.html und verwendet ShowDisplayController.
  3. Das otherwise Die Klausel legt die Standardansicht fest, die dem Benutzer angezeigt wird, in diesem Fall DisplayEvent.

Routing-Konfiguration

Schritt 4) Fรผgen Sie Controller hinzu, um die Geschรคftslogik fรผr beide Funktionen zu verarbeiten. Jeder Controller setzt lediglich eine Nachricht in seinem Scope-Objekt, die angezeigt wird, wenn die entsprechende Ansicht angezeigt wird.

Controller hinzufรผgen

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

โš ๏ธ Drei Korrekturen zum ursprรผnglichen Angebot. Zunรคchst einmal lesen die Links #!NewEvent ohne Schrรคgstrich, wรคhrend die Routen wie folgt deklariert werden: /NewEventDaher gab es keine รœbereinstimmung. Ab AngularJS 1.6 ist das Standard-Hash-Prรคfix !, wodurch die korrekte Adresse entsteht #!/NewEvent โ€” ein Schrรคgstrich nach dem Ausrufezeichen. Zweitens, ShowDisplayController Die Nachricht sollte auf โ€žDies ist eine Ereignisanzeigeโ€œ gesetzt werden, wobei das Wort fehlt. zu dass der umgebende Text zitiert. Drittens, lib/bootstrap.js wurde von einem relativen Pfad geladen, der nirgendwo aufgelรถst wird und nie verwendet wird, daher wurde er entfernt.

Schritt 5) Erstellen Sie die Seiten add_event.html und show_event.htmlJeder dieser Ausdrรผcke enthรคlt einen Header und einen Ausdruck, der die vom zugehรถrigen Controller eingefรผgte Nachricht anzeigt.

  • add_event.html

add_event.html

<h2>Add New Event</h2>

{{message}}
  • show_event.html

show_event.html

<h2>Show Event</h2>

{{message}}

Wenn der Code erfolgreich ausgefรผhrt wird, wird die folgende Ausgabe im Browser angezeigt.

Ausgang:

ng-view Ausgabe

ng-view Ausgabe

Hรคufige ng-view-Fehler und wie man sie behebt

Fast alle Fehler bei ng-view lassen sich auf die Modulverdrahtung, das Adressformat oder die Art und Weise, wie die Seite ausgeliefert wird, zurรผckfรผhren und nicht auf die Direktive selbst.

  • Der Ansichtsbereich bleibt leer: die ngRoute Das Modul wurde nicht als Abhรคngigkeit aufgefรผhrt, oder angular-route.js wurde nicht geladen. Beide werden benรถtigt, und das Skript muss danach kommen. angular.min.js.
  • Links รคndern die Adresse, aber es wird nichts angezeigt: Der href-Wert stimmt nicht mit der Route รผberein. Ab AngularJS 1.6 muss die Adresse angepasst werden. #!/Route; รคlterer Code, geschrieben fรผr Version 1.5, verwendet #/Route.
  • Vorlagen kรถnnen aufgrund eines CORS-Fehlers nicht geladen werden: Die Seite wurde direkt von der Festplatte geรถffnet. Stellen Sie sie รผber HTTP bereit, weil templateUrl wird durch eine AJAX-Anfrage abgerufen, das Dateiprotokoll blockiert.
  • Es erscheint immer nur die letzte Ansicht: Mehrere Elemente tragen ng-view. AngularJS unterstรผtzt nur eine einzige View-Region pro Seite.
  • Beim ersten Laden wird nichts angezeigt: nicht otherwise Die Klausel ist so konfiguriert, dass eine leere Adresse keiner Route entspricht.

Hรคufig gestellte Fragen

Nein. ngRoute unterstรผtzt nur einen View-Bereich pro Seite. Fรผr mehrere benannte Bereiche gleichzeitig verwenden Sie die ui-router-Bibliothek, die ui-view bereitstellt und verschachtelte sowie gleichrangige Views unterstรผtzt.

HTML5-Modus aktivieren mit $locationProvider.html5Mode(true) und fรผgen Sie ein Basis-Tag hinzu. Der Server muss dann unbekannte Pfade auf index.html umleiten, andernfalls wird beim Neuladen ein 404-Fehler zurรผckgegeben.

Weitgehend. AI Die Tools wandeln Routentabellen in Angular-Routen-Arrays um und ersetzen ng-view durch router-outlet. Controller mรผssen weiterhin manuell als Komponenten neu geschrieben werden.

KI-Assistenten รผberprรผfen schnell die drei รผblichen Verdรคchtigen: eine fehlende ngRoute-Abhรคngigkeit, ein Hash-Prรคfix, das nicht zur Route passt, und einen Vorlagenpfad, den der Browser nicht abrufen kann.

Ja. Fรผge ein resolve AngularJS blockiert die Route. AngularJS wartet, bis diese Promises erfรผllt sind, bevor der Controller instanziiert wird. Dadurch wird vermieden, dass die Ansicht kurz leer erscheint, wรคhrend Daten eintreffen.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: