Nachdem ich das AngularJS-Tutorial Schritt 9 gelesen habe, habe ich meinen eigenen AngularJS-Filter erstellt, der boolesche Daten in HTML konvertieren soll.
Hier ist mein Filtercode:
angular.module('phonecatFilters', []).filter('iconify', function () { // My custom filter
return function (input) {
return input ? '<i class="icon-ok"></i>' : '<i class="icon-remove"></i>';
}
});
Hier ist mein HTML-Code:
<dt>Infrared</dt>
<dd>{{phone.connectivity.infrared | iconify }}"></dd>
Das Problem ist, dass der Borroser den zurückgegebenen Wert buchstäblich wie folgt anzeigt:
<i class="icon-ok"></i>
nicht als Symbole (oder gerendertes HTML), die angezeigt werden sollen.
Hier ist ein JSFiddle-Beispiel
Ich denke, dass während dieses Prozesses eine gewisse Desinfektion auftritt.
Ist es möglich, diese Desinfektion für diesen bestimmten Filter auszuschalten?
Außerdem weiß ich, wie Symbole angezeigt werden, indem keine HTML-Ausgabe vom Filter zurückgegeben wird, sondern nur "OK" oder "Entfernen" von Text, den ich dann ersetzen kann:
<i class="icon-{{phone.connectivity.infrared | iconify}}"><i>
aber das will ich nicht.
angular-sanitize.js
Datei einschließen müssen, damit dies funktioniert. Wenn Sie dasselbe tun möchten, ohne diese zusätzliche Bibliothek einzuschließen, können Sie dieng-bind-html-unsafe
Direktive verwenden.ng-html-bind-unsafe
und erfordert, dass der HTML-Inhalt explizit als "sicher" gekennzeichnet wird - siehe: docs.angularjs.org/api/ng.$sce#Example{{myContent | myFilter | html_safe}}
Wenn ich es nicht falsch lese, nähern Sie sich auf die falsche Weise
Ich denke, ng-class ist eine Direktive, die Sie für diesen Job benötigen, und ist sicherer als das Rendern in Klassenattribute.
In Ihrem Fall fügen Sie einfach eine Objektzeichenfolge mit den ID-Zeichenfolgen als Klasse und dem Wert als ausgewertetem Ausdruck hinzu
Nebenbei bemerkt, Sie sollten nur Direktiven (integriert und benutzerdefiniert) verwenden, um HTML / Dom zu bearbeiten. Wenn Sie ein komplexeres HTML-Rendering benötigen, sollten Sie stattdessen die Direktive betrachten
quelle
<i ng-class="phone.connectivity.infrared ? 'icon-ok' : 'icon-remove'"></i>
Probieren Sie diesen Filter aus
erfordert Winkel-Desinfektion
Hauptlink
quelle