2015-08-07 4 views
5

Ich erstelle eine angularjs einzelne Seite Anwendung. Die Daten werden von einem Webservice unter json -format abgerufen.Wie rendern Sie HTML mit anguarjs?

Das Problem ist, dass einige Textelemente werden mit vorformatierte HTML-Tags

json Ausgang:

{ 
    "text": "<p><span style="text-decoration: underline;"><strong>test text</string></span></p>" 
} 

Nun, wie kann ich diesen Text anzuzeigen und den HTML-Code direkt zu übertragen, so dass nur "test" ist Dem Benutzer angezeigt und der Rest dient als Markup?

<h1>{{data.text}}</h1> 
+0

Könnte diese Hilfe? http://stackoverflow.com/questions/9381926/insert-html-into-view-using-angularjs – Baart

Antwort

6

Sie müssen ng-bind-html="data.text" zu Ihrem h1-Tag hinzufügen.

Ihre html würde wie folgt aussehen:

<h1 ng-bind-html="data.text"></h1> 

Dokumentation: ngBindHtml

+0

Das klingt vielversprechend, obwohl, wenn ich es verwende ich sehe keine Ausgabe mehr, nur ein leeres Element. – membersound

+0

@membersound Sie haben Probleme mit der Formatierung in Ihrem JSON. Dein Attribut stule sollte '' 'anstelle von' '' verwenden sonst bricht es alles. Aber es ist vielleicht nur ein Tippfehler. –

+0

Das ist nur ein Tippfehler in meinem Beispiel hier. – membersound

-1

Versuchen Sie, diese https://docs.angularjs.org/api/ng/directive/ngBind

<script> 
    angular.module('bindExample', []) 
    .controller('ExampleController', ['$scope', function($scope) { 
     $scope.name = 'Whirled'; 
    }]); 
</script> 
<div ng-controller="ExampleController"> 
    <label>Enter name: <input type="text" ng-model="name"></label><br> 
    Hello <span ng-bind="name"></span>! 
</div> 
+2

Er wollte html, nicht eine einfache var. –

3

Update2 zu verwenden: ist es Ihnen möglich, die HTML-Streifen?

angular.module('myApp.filters', []). 
    filter('htmlToPlaintext', function() { 
     return function(text) { 
     return String(text).replace(/<[^>]+>/gm, ''); 
     }; 
    } 
); 

Und Sie HTML:: Es könnte so geschehen

<div>{{myText | htmlToPlaintext}}</div> 

weitere Informationen siehe: angularjs to output plain text instead of html

Update: brauchen Sie wirklich die html von Ihrem json? Es ist besser, Ihr HTML in den Ansichten zu speichern und die Daten von Ihrem json zu erhalten. Schöne Trennung und sehr einfach zu bedienen.

Es ist möglich, aber nicht so einfach wie Nicht-HTML (große Sicherheit).

In Angular 1.3 müssen Sie wie folgt vor:

<div ng-bind-html="htmlBind"></div> 

In Ihrem Controller hinzufügen:

$scope.htmlBind = $sce.trustAsHtml('<span>Hi, I am <em>Joe</em>'); 

Erläuterung: Sie sehen die $ sce:

$ sce ist ein Dienst, der AngularJS Strict Contextual Escaping-Dienste zur Verfügung stellt.

trustAs (Typ, Wert)

Delegierten $ sceDelegate.trustAs. Als solches wird ein Objekt zurückgegeben, das von angular für die Verwendung in bestimmten strikten kontextabhängigen Escape-Kontexten (wie ng-bind-html, ng-include, beliebige src-Attribut-Interpolation, beliebige dom-Ereignis-Bindungsattribut-Interpolation wie für onclick etc.) vertraut wird.) die den angegebenen Wert verwendet. Siehe * $ sce für das Aktivieren von strikt kontextabhängigem Escaping.

Lesen Sie mehr hier:

+0

Ist es möglich, dies direkt innerhalb von HTML zu lösen? Weil ich eine 'json' Antwort bekomme und auf die Elemente in html durch'

'ohne die' $ sce' aus einem Controller heraus zu rufen. – membersound

+0

Ich kann die JSON-Antwort nicht steuern, und daher bin ich gezwungen, vorformatierte HTML-Markups zu verarbeiten. – membersound

+0

Siehe meine aktualisierte Antwort – schellingerht