Ein bisschen neu in eckigen. Ist es möglich, den Knoten ng-include durch den Inhalt der enthaltenen Vorlage zu ersetzen ? Zum Beispiel mit:
<div ng-app>
<script type="text/ng-template" id="test.html">
<p>Test</p>
</script>
<div ng-include src="'test.html'"></div>
</div>
Das generierte HTML ist:
<div ng-app>
<script type="text/ng-template" id="test.html">
<p>Test</p>
</script>
<div ng-include src="'test.html'">
<span class="ng-scope"> </span>
<p>Test</p>
<span class="ng-scope"> </span>
</div>
</div>
Aber was ich will ist:
<div ng-app>
<script type="text/ng-template" id="test.html">
<p>Test</p>
</script>
<p>Test</p>
</div>
'test.html'
, um die Vorlage anstelle der URL zu verwendenAntworten:
Ich hatte das gleiche Problem und wollte immer noch, dass die Funktionen von ng-include eine dynamische Vorlage enthalten. Ich habe eine dynamische Bootstrap-Symbolleiste erstellt und brauchte das sauberere Markup, damit die CSS-Stile richtig angewendet werden können.
Hier ist die Lösung, die ich für Interessierte gefunden habe:
HTML:
Benutzerdefinierte Richtlinie:
Wenn diese Lösung im obigen Beispiel verwendet würde, würde das Setzen von scope.dynamicTemplatePath auf 'test.html' zum gewünschten Markup führen.
quelle
Dank @ user1737909 habe ich erkannt, dass ng-include nicht der richtige Weg ist. Richtlinien sind der bessere Ansatz und expliziter.
In HTML:
quelle
replace:true
in Vorlagen als veraltet markiert ist . Ich würde diese Lösung aufgrund des Verfallsstatus vermeiden.Ich hatte das gleiche Problem, mein CSS-Stylesheet von Drittanbietern mochte das zusätzliche DOM-Element nicht.
Meine Lösung war super einfach. Bewegen Sie einfach das ng-include 1 nach oben. Also statt
Ich habe einfach getan:
Ich wette, das wird in den meisten Situationen funktionieren, auch wenn es technisch nicht das ist, was die Frage stellt.
quelle
Eine andere Alternative besteht darin, eine eigene einfache Ersetzungs- / Einschlussrichtlinie zu schreiben, z
Dies würde dann wie folgt verwendet:
quelle
Dies ist der richtige Weg, um die Kinder zu ersetzen
quelle
compile
nach verschiebenlink
, da mein Element während der Kompilierungsphase leer war.Die folgende Direktive erweitert die native Direktivenfunktionalität von ng-include.
Es wird ein Ereignis-Listener hinzugefügt, der das ursprüngliche Element ersetzt, wenn der Inhalt bereit und geladen ist.
Verwenden Sie es auf die ursprüngliche Weise, fügen Sie einfach das Attribut "Ersetzen" hinzu:
oder mit Attributnotation:
Hier ist die Direktive (denken Sie daran, das Modul 'include-replace' als Abhängigkeit einzuschließen):
quelle
Ich würde eine sicherere Lösung wählen als die von @Brady Isom.
Ich ziehe es vor, mich auf die
onload
Option vonng-include
zu verlassen, um sicherzustellen, dass die Vorlage geladen ist, bevor ich versuche, sie zu entfernen.Keine zweite Richtlinie erforderlich, da alles innerhalb der ersten behandelt wird.
quelle
let ngInclude = angular.element( element[ 0 ].querySelector( 'ng-include' ) ); ngInclude.replaceWith( ngInclude.children() );