2013-02-04 32 views
18

Ho un piccolo filtro angolare che inserisce un'icona (bootstrap) al posto di un valore reale. funziona, ma il codice HTML è codificato:Filtro angolare che genera HTML

var conApp = angular.module('conApp', []); 
    conApp.filter('trueIcon', function($filter){ 
    return function(booleanValue){ 
     return booleanValue ? '<i class="icon-ok"></i>' : ''; 
    } 
    }); 

devo implementare un altro filtro per decodificare il codice html? Esiste un modo "angolare" per farlo?

risposta

29

È necessario utilizzare ng-bind-html per eseguire il rendering di html.

<span ng-bind-html="foo | trueIcon"></span> 

Detto questo ... non è proprio quello a cui servono i filtri. I filtri sono più utili per lo scrubbing dei dati scritti in una vista, piuttosto che per generare elementi della vista/DOM stessa. Probabilmente sarete meglio creare una direttiva che:

app.directive('trueIcon', function() { 
    return { 
     restrict: 'E', 
     template: '<i ng-class="{\'icon-ok\': value, \'icon-not-okay\': !value}"></i>', 
     scope: { 
     value: '=' 
     } 
    }; 
}); 

<true-icon value="foo"></true-icon> 
+1

Entrambi funzionano alla grande! – Sucrenoir

+1

@blesh In questo caso 1 anche per te :-) Stai anche rispondendo a una quantità enorme di domande! –

+0

Qualsiasi motivo per cui non riesco a definire la mia direttiva come 'vera icona'? I nomi delle direttive sono sempre camel-cat? – Sucrenoir

6

AngularJS è igienizzante risultati della valutazione delle espressioni di default. Per visualizzare HTML come markup hai 2 opzioni:

Mentre quanto sopra farà funzionare il filtro, forse dovresti considerare di trasformarlo in una direttiva?

+0

+1 a te perché entrambi abbiamo detto fondamentalmente la stessa cosa ... e ti vedo in giro tutto il tempo. –

+0

Penso che i tuoi link non siano più validi. – jcollum

Problemi correlati