AngularJS ng-include: HTML-Dateien mit Beispiel einbinden

โšก Intelligente Zusammenfassung

ng-include in AngularJS ruft ein externes HTML-Fragment ab, kompiliert es und fรผgt es in die Hauptseite ein, sodass gemeinsam genutztes Markup wie eine Tabelle, eine Kopf- oder FuรŸzeile in einer wiederverwendbaren Teildatei enthalten ist.

  • ๐Ÿ”˜ Direktive Rolle: ng-include ruft ein externes Fragment ab und fรผgt es als Kindknoten seines Wirtselements ein.
  • โ˜‘๏ธ Angefรผhrter Pfad: Der src-Wert ist ein Ausdruck, daher mรผssen Dateinamen in einfache Anfรผhrungszeichen innerhalb des Attributs gesetzt werden.
  • โœ… Ausgearbeitetes Beispiel: Table.html wird รผber ng-repeat gerendert, sobald Main.html es in den Controller-Div einfรผgt.
  • ๐Ÿงช Neuer untergeordneter Gรผltigkeitsbereich: Jeder Include-Befehl erzeugt einen Kindbereich, daher benรถtigen primitive Bindungen die Punktnotation.
  • ๏ธ Leere Felder enthalten: Die Same-Origin-Regeln, $sce und der Dateizugriff erklรคren die meisten leeren Ergebnisse.
  • ๐Ÿ“Š Versionshinweis: Die Unterstรผtzung fรผr AngularJS wurde im Januar 2022 eingestellt; modernes Angular verwendet stattdessen Komponenten.

Die ng-include-Direktive in AngularJS fรผgt eine externe HTML-Datei in die Hauptvorlage ein.

StandardmรครŸig bietet HTML nicht die Mรถglichkeit, clientseitigen Code aus anderen Dateien einzubinden. Normalerweise ist es in jeder Programmiersprache eine gute Praxis, die Funktionalitรคt fรผr jede Anwendung auf verschiedene Dateien zu verteilen.

Wenn Sie beispielsweise eine Logik fรผr numerische Operationen haben, mรถchten Sie diese Funktionalitรคt normalerweise in einer separaten Datei definieren. Diese separate Datei kann dann durch einfaches Einfรผgen in mehrere Anwendungen wiederverwendet werden.

Dies ist normalerweise das Konzept von Fรผgen Sie Aussagen hinzu die verfรผgbar sind in Programmiersprachen wie z.B. .NET und Java.

Dieses Tutorial befasst sich mit anderen Mรถglichkeiten, Dateien (Dateien, die externe Inhalte enthalten) zu verarbeiten. HTML Der Code kann in die Haupt-HTML-Datei eingebunden werden.

Kundenseite umfasst

Eine der gebrรคuchlichsten Methoden zum Einbinden von HTML-Code ist รผber JavaSkript. JavaSkript ist eine Programmiersprache, mit der der Inhalt einer HTML-Seite im Handumdrehen bearbeitet werden kann. Daher JavaSkripte kรถnnen auch verwendet werden, um Code aus anderen Dateien einzubinden.

Die folgenden Schritte zeigen, wie dies erreicht werden kann.

Schritt 1) Definieren Sie eine Datei namens Sub.html und fรผgen Sie der Datei den folgenden Code hinzu.

<div>
	This is an included file
</div>

Schritt 2) Erstellen Sie eine Datei mit dem Namen โ€žSample.htmlโ€œ, die Ihre Hauptanwendungsdatei ist, und fรผgen Sie den folgenden Codeausschnitt hinzu.

Im Folgenden sind die wichtigsten Aspekte aufgefรผhrt, die Sie beim folgenden Code beachten sollten:

  1. Im Body-Tag gibt es ein div-Tag mit der ID โ€žContentโ€œ. Hier wird der Code aus der externen Datei โ€žSub.htmlโ€œ eingefรผgt.
  2. Es gibt einen Verweis auf ein jQuery-Skript. jQuery ist eine Skriptsprache, die auf โ€ฆ aufbaut. JavaEin Skript, das die DOM-Manipulation noch einfacher macht.
  3. Im JavaIn der Skriptfunktion gibt es die Anweisung '$(โ€œ#Contentโ€).load(โ€œSub.htmlโ€);', die bewirkt, dass der Code in der Datei Sub.html in das div-Tag mit der ID Content eingefรผgt wird.
    <html> 
    	  <head> 
    	    <script src="jquery.js"></script> 
    	    <script> 
    	    $(function(){
    	      $("#Content").load("Sub.html"); 
    	    });
        </script> 
      </head> 
    
    <body> 
         <div id="Content"></div>
      </body> 
    </html>

Server Side Includes

Server Side Includes sind auch verfรผgbar, um einen gemeinsamen Codeabschnitt in eine Site einzubinden. Dies geschieht normalerweise, um Inhalte in die folgenden Teile eines HTML-Dokuments einzufรผgen.

  1. Kopfzeile
  2. FuรŸzeile
  3. Navigationsmenรผ.

Damit ein Webserver eine Server Side Include-Datei erkennt, mรผssen die Dateinamen spezielle Erweiterungen haben. รœblicherweise werden vom Webserver Dateiendungen wie .shtml, .stm, .shtm und .cgi akzeptiert.

Die Anweisung zum Einbinden von Inhalten heiรŸt โ€žinclude-Anweisungโ€œ. Ein Beispiel fรผr die include-Anweisung ist unten dargestellt:

<!--#include virtual="navigation.cgi" -->
  • Die obige Anweisung ermรถglicht die Einbindung des Inhalts eines Dokuments in ein anderes.
  • Der โ€žvirtuelleโ€œ Befehl oben im Code wird verwendet, um das Ziel relativ zum Domรคnenstamm der Anwendung anzugeben.
  • Zusรคtzlich zum virtuellen Parameter gibt es auch den Dateiparameter, der verwendet werden kann. Die โ€žDateiโ€œ-Parameter werden verwendet, wenn der Pfad relativ zum Verzeichnis der aktuellen Datei angegeben werden muss.

Hinweis:

Der virtuelle Parameter wird verwendet, um die Datei (HTML-Seite, Textdatei, Skript usw.) anzugeben, die eingebunden werden muss. Wenn der Webserverprozess keinen Zugriff zum Lesen der Datei oder zum Ausfรผhren des Skripts hat, schlรคgt der Befehl โ€žincludeโ€œ fehl. Das Wort โ€žvirtuellโ€œ ist ein Schlรผsselwort, das in die Include-Direktive eingefรผgt werden muss.

So fรผgen Sie eine HTML-Datei in AngularJS ein

AngularJS bietet die Mรถglichkeit, Funktionalitรคt aus anderen AngularJS-Dateien mithilfe von ng-include einzubinden. Richtlinien.

Der Hauptzweck der โ€žng-include-Direktiveโ€œ besteht darin, ein externes HTML-Fragment abzurufen, zu kompilieren und in die Hauptanwendung von AngularJS einzubinden.

Versionshinweis: AngularJS 1.x hat den Langzeit-Support am 31. Dezember 2021 verlassen, und das Framework-Team erklรคrt, dass Die Unterstรผtzung fรผr AngularJS wurde offiziell eingestellt. Im Januar 2022 wurden keine neuen Releases oder Sicherheitspatches verรถffentlicht. Jeder Schritt und Codeblock im Folgenden bleibt als historische Referenz unverรคndert. Modernes Angular bietet keinen direkten Ersatz: Markup wird aus Komponenten zusammengesetzt, und ein zur Laufzeit ausgewรคhltes Fragment wird gerendert. ng-container und ngComponentOutlet.

Schauen wir uns den unten stehenden Code an und erklรคren wir, wie dies mit AngularJS erreicht werden kann.

Schritt 1) Schreiben wir den folgenden Code in eine Datei namens Table.html. Dies ist die Datei, die mithilfe der ng-include-Direktive in unsere Hauptanwendungsdatei eingefรผgt wird.

Der folgende Codeausschnitt setzt voraus, dass eine Bereichsvariable namens โ€žtutorialโ€œ existiert. AnschlieรŸend wird sie verwendet. ng-Wiederholung Die Direktive durchlรคuft jedes Thema in der Variable โ€žtutorialโ€œ und zeigt die Werte fรผr โ€žNameโ€œ und โ€žโ€œ an.Description' Schlรผssel-Wert-Paar.

<table>
    <tr ng-repeat="Topic in tutorial">
        <td>{{ Topic.Name }}</td>
        <td>{{ Topic.Description }}</td>
    </tr>
</table>

Schritt 2) Schreiben wir den folgenden Code in eine Datei namens Main.html. Dies ist eine einfache AngularJS-Anwendung mit folgenden Aspekten.

  1. Verwenden Sie die โ€žng-include-Direktiveโ€œ, um den Code in die externe Datei โ€žTable.htmlโ€œ einzufรผgen. Die Anweisung wurde im folgenden Code fett hervorgehoben. Also das div-Tag ' ' wird durch den gesamten Code in der Datei โ€žTable.htmlโ€œ ersetzt.
  2. Im ControllerIm Rahmen des $scope-Objekts wird eine Variable namens โ€žtutorialโ€œ erstellt. Diese Variable enthรคlt eine Liste von Schlรผssel-Wert-Paaren.

In unserem Beispiel sind die Schlรผssel-Wert-Paare

  1. Name โ€“ Dies bezeichnet den Namen eines Themas wie Controller, Modelle und Anweisungen.
  2. Description โ€“ Hier finden Sie eine Beschreibung jedes Themas

Auf die Tutorial-Variable wird auch in der Datei โ€žTable.htmlโ€œ zugegriffen.

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Event Registration</title>
        <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>
</head>
<body ng-app="sampleApp">
<div ng-controller="AngularController">
    <h3> Guru99 Global Event</h3>
		<div ng-include="'Table.html'"></div>
</div>
<script>

    var sampleApp = angular.module('sampleApp',[]);
    sampleApp.controller('AngularController', function($scope) {
        $scope.tutorial =[
            {Name: "Controllers" , Description : "Controllers in action"},
            {Name: "Models" , Description : "Models and binding data"},
            {Name: "Directives" , Description : "Flexibility of Directives"}
        ];

    });
</script>
</body>
</html>

Wenn Sie den obigen Code ausfรผhren, erhalten Sie die folgende Ausgabe.

Ausgang:

Der folgende Screenshot zeigt das gerenderte Ergebnis: Der Browser-Tab trรคgt den Titel โ€žEvent Registrationโ€œ, die รœberschrift befindet sich รผber der eingefรผgten Tabelle, und die drei Zeilen werden รผber das Partial aus dem Tutorial-Array in Main.html geladen. Der kommentierte Screenshot zeigt die รœberschrift โ€žGur99โ€œ, wรคhrend der Code Folgendes ausgibt: Guru99

Browserausgabe des AngularJS-ng-include-Beispiels, die die aus Table.html eingefรผgte Thementabelle zeigt.

ng-include-Attribute: src, onload und autoscroll

Neben dem Dateinamen akzeptiert die Direktive zwei optionale Attribute und kann auf drei Arten geschrieben werden: als Attribut eines beliebigen Elements, als <ng-include> als Element oder als CSS-Klasse. Die folgende Referenz folgt der offiziellen ngInclude-Dokumentation.

Attribut Erforderlich Was sie tut,
src oder ng-include Ja Ausdruck, der zum Template ausgewertet wird URL
laden Nein Der Ausdruck wird jedes Mal ausgewertet, wenn ein neues Teilstรผck vollstรคndig geladen ist.
automatisches Scrollen Nein Ruft $anchorScroll nach dem Laden des Inhalts auf; das Weglassen des Attributs deaktiviert das Scrollen.
<div ng-include="'Table.html'" onload="loaded = true" autoscroll></div>
<ng-include src="templateUrl"></ng-include>

Der hรคufigste Fehler ergibt sich aus der ersten Zeile: src nimmt eine AusdruckEs handelt sich nicht um eine einfache Zeichenkette. Ein Pfadliteral benรถtigt daher eigene Anfรผhrungszeichen innerhalb des Attributs, weshalb das obige Beispiel Folgendes lautet: ng-include="'Table.html'". Schreiben ng-include="Table.html" lรคsst AngularJS auswerten Table Wenn Sie eine Bereichseigenschaft haben, finden Sie nichts und lassen Sie das Element leer.

Warum ng-include einen neuen untergeordneten Gรผltigkeitsbereich erstellt

Die Direktive fรผgt keinen Markup-Code in den umgebenden Gรผltigkeitsbereich ein. Jedes `include` erzeugt ein neues Kindelement. kann dass sie prototypisch von dem Bereich erbt, in dem sie deklariert wurde, und dass diese Tatsache die meisten bindenden รœberraschungen erklรคrt.

Das Lesen funktioniert wie erwartet. Der obige Ausschnitt lautet: tutorial direkt vom Elternteil, weshalb ng-repeat findet das Array. Beim Schreiben tritt der Fehler auf: wenn eine partielle Variable einem primitiven Datentyp einen Wert zuweist, wie beispielsweise bei ng-model="topic"AngularJS erstellt topic Im Kindbereich รคndert sich die Kopie im Elternbereich nie.

Zwei Gewohnheiten vermeiden die Falle:

  • รœber ein Objekt binden, wie in ng-model="data.topic", sodass Eltern- und Kindknoten denselben Bezugspunkt erreichen.
  • Speichern Sie den Zustand in einem Controller oder einem Service und stellen Sie Funktionen anstelle von einfachen Primitiven bereit.

Die Include-Anweisung gibt auch Folgendes aus: $includeContentRequested, $includeContentLoaded und $includeContentErrorso dass ein Elternteil reagieren kann $scope.$on ohne dabei รผberhaupt in den Kinderbereich einzugreifen.

Wie man ein leeres oder fehlgeschlagenes ng-include behebt

Ein Include-Befehl, der kein Ergebnis liefert, schlรคgt in der Regel aus einem von wenigen Grรผnden fehl. Gehen Sie diese Grรผnde der Reihe nach durch.

  1. Prรผfen Sie die Angebote. Ein Dateiname, der als Literal angegeben wird, benรถtigt einfache Anfรผhrungszeichen innerhalb des Attributwerts. Ohne diese wird der Ausdruck zu โ€žundefiniertโ€œ aufgelรถst, und es wird keine Anfrage gesendet.
  2. Die Seite wird รผber HTTP bereitgestellt. Die Direktive sendet einen XHR-Request an das Partial, daher schlรคgt das direkte ร–ffnen von Main.html von der Festplatte รผber eine Dateiadresse in den meisten Browsern fehl. Jeder lokale Webserver behebt dieses Problem.
  3. Bestรคtigen Sie, dass der Pfad aufgelรถst wird. Beobachten Sie das Netzwerk-Panel hinsichtlich der Anfrage. Ein 404-Fehler bedeutet, dass der Pfad relativ zur Seite ist, die die Einbindung enthรคlt, und nicht relativ zur Partial-Datei, die darauf verweist.
  4. Beachten Sie die Same-Origin-Regel. StandardmรครŸig ist die Vorlage URL muss mit der Domรคne und dem Protokoll des Anwendungsdokuments รผbereinstimmen, da AngularJS es durchleitet $sce.getTrustedResourceUrlEine Vorlage von einer anderen Quelle benรถtigt einen Eintrag in der vertrauenswรผrdigen Ressource. URL Alternativ kann eine Liste oder ein expliziter trustAsResourceUrl-Wrapper verwendet werden, und der Remote-Server muss weiterhin CORS-Header senden.
  5. Achten Sie auf das Scheitern. $includeContentError wird immer dann ausgelรถst, wenn der Antwortstatus auรŸerhalb des Bereichs von 200 bis 299 liegt, wodurch ein ansonsten leerer Bereich in eine protokollierbare Meldung umgewandelt wird.

Ein weiterer Grund wird leicht รผbersehen. AngularJS speichert jedes geladene Partial in `$templateCache`, sodass eine bearbeitete Datei weiterhin veralteten Code ausliefern kann, bis der Cache-Eintrag entfernt oder die Seite neu geladen wird. Wenn ein Fragment eigenes Verhalten benรถtigt und nicht nur den Code, dann โ€ฆ benutzerdefinierte Direktive Das Werkzeug mit eigener Vorlage und isoliertem Anwendungsbereich ist das bessere Werkzeug.

Hรคufig gestellte Fragen

ng-include fรผgt ein selbst benanntes Fragment an beliebiger Stelle auf der Seite ein. ng-view rendert die jeweilige Vorlage. Router Karten auf die aktuelle URL, und nur ein ng-view gehรถrt in ein Layout.

Nein. Ein Teilbereich enthรคlt nur ein Fragment.ping Wenn es in HTML-Tags (head oder body) verwendet wird, bleiben vereinzelt Elemente zurรผck, da das Markup als Kindknoten des รผbergeordneten Elements eingefรผgt und nicht als Dokument analysiert wird.

Nein. Das Fragment wird kompiliert und als DOM-Knoten eingefรผgt, daher werden Inline-Skriptelemente nie ausgefรผhrt. Laden Sie gemeinsam genutzte Skripte von der Hostseite oder verschieben Sie das Verhalten in einen Controller oder eine Direktive.

Ja. Wenn ngAnimate geladen ist, lรถst die Direktive eine Enter-Animation beim eingehenden Fragment und eine Leave-Animation beim ausgehenden Fragment aus, und die beiden werden gleichzeitig ausgefรผhrt, sobald sich der Quellausdruck รคndert.

Ja. Da der Wert ein Ausdruck ist, wird das Fragment ausgetauscht, sobald sich eine Bereichseigenschaft รคndert. Schรผtzen Sie das Element mit `ng-if`, damit nichts geladen wird, bis die Eigenschaft einen gรผltigen Pfad enthรคlt.

Es existiert kein ร„quivalent. Wiederverwendbares Markup wird zu einer Komponente, und ein zur Laufzeit ausgewรคhltes Fragment wird gerendert. ngComponentOutlet oder ngTemplateOutlet innerhalb eines ng-Containers.

Sprachmodelle lesen einen bestehenden Template-Satz ein und gruppieren Partials, Controller und Bindings zu Kandidatenkomponenten. AnschlieรŸend schlagen sie eine Migrationsreihenfolge vor. Betrachten Sie die Ausgabe als ersten Entwurf, da die Bereichsvererbung selten nahtlos auf Komponenteneingaben abgebildet werden kann.

GitHub-Copilot Der Agentenmodus wandelt ein Partial in eine eigenstรคndige Komponente mit typisierten Eingaben um und รผberschreibt die Hostvorlage, allerdings mรผssen die generierten Bindungen und Tests noch von Menschen รผberprรผft werden.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: