2015-03-04 11 views
7

Sto provando a visualizzare una stringa HTML nella mia vista angolare.

All'inizio, ingenuamente provato questo:

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

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

Ma questo solo visualizza <a href="#">Link</a> nella vista, non: link.

Dopo alcune ricerche, mi sono imbattuto in ngSanitize. L'ho provato, ma elimina completamente tutto il codice HTML per lasciare solo testo grezzo. Piuttosto sicuro davvero. Un po 'troppo, in realtà. Ad ogni modo, ngSanitize ora non è aggiornato.

This SO post indica che ora il servizio $ sce deve essere utilizzato al posto di ngSnitize.

A seguito di queste diverse soluzioni, qui è quello che mi si avvicinò con:

HTML

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

JS

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

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

Ma questo errore viene in console:

ReferenceError: $sce is not defined 

Cosa mi fa schifo che il il servizio $ sce dovrebbe far parte del core di Angular dalla v1.2, e sto usando la v1.3.9.

Cosa sta succedendo qui? Qualcuno ha un metodo definitivo per visualizzare l'HTML in una vista AngularJS (senza filtri che lasciano solo il testo non elaborato)?

+0

Provare a utilizzare angular.element – Tyranicangel

+0

Cosa vuoi dire? Inietti HTML usando un wrapper jQuery? Come lo faresti nel cambio di 'ad.text'? Lo sto dando un'occhiata. –

+1

Hai iniettato $ sce nel controller? –

risposta

28

Non dimenticare di iniettarla controllore, per esempio:

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

Dannazione, era così semplice? Quindi fa parte del nucleo, ma devi anche iniettarlo? Non sono ancora abbastanza abituato ad Angular. Molte grazie. –

+2

Sì, è necessario iniettarlo manualmente nel controller, il che, se ci pensate, ha senso. Altrimenti altrimenti inietteresti costantemente tutti i servizi nel controller, anche quelli che non usi. Questo non farebbe altro che gonfiare il controller senza altra ragione se non doverlo scrivere esplicitamente, ed essere espliciti e non gonfiati è preferibile essere impliciti e gonfiati in questo caso. –

+0

Questo esempio mi ha appena salvato il culo: grazie Samir Alajmovic! Nel mio codice la sintassi era leggermente diversa come: .controller ('DingleheimersController', function ($ scope, $ sce, $ compile, $ filter, $ http, $ location, $ route, $ timeout, fetch) {, semplicemente aggiungendo $ sce nella funzione (,,,) list ha funzionato così posso usare $ sce.trustAsResourceUrl. Essendo stato gettato ad un codebase angolare senza alcun addestramento AngJS è stato sicuramente divertente: - (... –

Problemi correlati