Ich habe eine AngularJS-Direktive, in der ich dem aktuellen Element der Direktive ein svg-Tag hinzufügen möchte. Im Moment mache ich das mit Hilfe von jQuery
link: function (scope, iElement, iAttrs) {
var svgTag = $('<svg width="600" height="100" class="svg"></svg>');
$(svgTag).appendTo(iElement[0]);
...
}
Ich möchte jedoch nicht, dass die Direktive für diese einfache Aufgabe von jQuery abhängt. Wie würde ich dasselbe mit AngularJS-Mitteln (oder nativem JavaScript-Code) erreichen?.
Warum nicht die einfache (aber mächtige) Methode html()
ausprobieren:
iElement.html('<svg width="600" height="100" class="svg"></svg>');
Oder append
als Alternative:
iElement.append('<svg width="600" height="100" class="svg"></svg>');
Und natürlich sauberer:
var svg = angular.element('<svg width="600" height="100" class="svg"></svg>');
iElement.append(svg);
In AngularJS können Sie Angular.Element verwenden, das die Lite-Version von jQuery ist. Sie können so ziemlich alles damit machen, sodass Sie jQuery nicht einbinden müssen.
Grundsätzlich können Sie Ihren Code so umschreiben:
link: function (scope, iElement, iAttrs) {
var svgTag = angular.element('<svg width="600" height="100" class="svg"></svg>');
angular.element(svgTag).appendTo(iElement[0]);
//...
}
Sie könnten so etwas gebrauchen
var el = document.createElement("svg");
el.style.width="600px";
el.style.height="100px";
....
iElement[0].appendChild(el)
Wenn Ihr Zielelement leer ist und nur das Tag <svg>
Enthält, können Sie ng-bind-html
Folgendermaßen verwenden:
Deklarieren Sie Ihr HTML-Tag in der Bereichsvariablen der Direktive
link: function (scope, iElement, iAttrs) {
scope.svgTag = '<svg width="600" height="100" class="svg"></svg>';
...
}
Fügen Sie dann in Ihrer Direktivenvorlage das richtige Attribut genau an der Stelle hinzu, an der Sie das svg-Tag anhängen möchten:
<!-- start of directive template code -->
...
<!-- end of directive template code -->
<div ng-bind-html="svgTag"></div>
Vergessen Sie nicht, ngSanitize
einzuschließen, damit ng-bind-html
Die HTML-Zeichenfolge automatisch in vertrauenswürdiges HTML konvertiert und Unsicherheiten vermieden werden Warnhinweise zur Code-Eingabe.
Siehe offizielle Dokumentation für weitere Details.