2015-03-04 5 views
7

Ich versuche, eine HTML-Zeichenfolge in meiner Winkelansicht anzuzeigen.

Anfangs habe ich diese naiv versucht:

<p>{{ad.text}}</p> 

$scope.ad = { 'text' : '<a href="#">Link</a>'}; // Dynamically fetched, etc. This is just an example text 

Aber das zeigt nur <a href="#">Link</a> in der Ansicht nicht: link.

Nach ein paar Recherchen stolperte ich über ngSanitize. Ich habe es ausprobiert, aber es entfernt den gesamten HTML-Code vollständig, um nur Rohtext zu lassen. Ziemlich sicher in der Tat. Eigentlich ein bisschen zu viel. Wie auch immer, ngSanitize ist jetzt veraltet.

This SO post zeigt an, dass jetzt der $ sce Dienst anstelle von ngSnitize verwendet werden muss.

diese verschiedenen Lösungen verfolgt, hier ist das, was ich kam mit:

HTML

<p ng-bind-html="htmlAdText"></p> 

JS

$scope.ad = { 'text' : '<a href="#">Link</a>'}; 

$scope.htmlAdText = $sce.trustAsHtml($scope.ad.text); 

Aber dieser Fehler kommt in der Konsole:

ReferenceError: $sce is not defined 

Was? Bugs mir ist, dass der $ sce-Dienst soll Teil von Angulars Kern seit v1.2 sein, und ich benutze v1.3.9.

Was geht hier vor? Hat jemand eine definitive Methode, um HTML in einer AngularJS-Ansicht anzuzeigen (ohne Filter, die nur den Rohtext belassen)?

+0

Versuchen angular.element mit – Tyranicangel

+0

Was meinen Sie? HTML mit einem jQuery-Wrapper einbinden? Wie würdest du das bei 'ad.text' ändern? Ich sehe es mir an. –

+1

Haben Sie $ sce in Ihren Controller injiziert? –

Antwort

28

Vergessen Sie nicht, es in die Steuerung zu injizieren, zum Beispiel:

app.controller('mainCtrl', [ '$scope', '$sce', function($scope, $sce){ 
    $scope.ad = { 'text' : '<a href="#">Link</a>'}; 
    $scope.htmlAdText = $sce.trustAsHtml($scope.ad.text); 
}]); //End Controller 
+1

Verdammt, war es so einfach? Es ist also Teil des Kerns, aber Sie müssen es auch injizieren? Ich bin noch nicht genug angewinkelt genug. Danke vielmals. –

+2

Ja, Sie müssen es manuell in den Controller injizieren, was sinnvoll ist, wenn Sie darüber nachdenken. Sonst würden Sie sonst ständig alle Dienste in Ihren Controller einspeisen, auch diejenigen, die Sie nicht benutzen. Dies würde den Controller nur aus einem anderen Grund aufblähen, als dass er es nicht explizit ausschreiben muss, und Explizit und Nicht-Blähungen vorzuziehen ist in diesem Fall vorzuziehen, implizit und aufgebläht zu sein. –

+0

Dieses Beispiel hat mir nur den Arsch gerettet: Danke, Samir Alajmovic! In meinem Code war die Syntax etwas anders als: .controller ('DinglehemersController', Funktion ($ scope, $ sce, $ kompilieren, $ filter, $ http, $ location, $ route, $ timeout, fetch) {, einfach $ hinzufügen sce in die Funktion (,,,) Liste hat das funktioniert, so dass ich $ sce.trustAsResourceUrl verwenden kann.Ein angular Codebase ohne AngJS Training geworfen wurde sicherlich Spaß gemacht: - (... –

Verwandte Themen