2013-02-04 15 views
18

Mam mały filtr kątowy, który wstawia ikonę (ładowanie początkowe) w miejsce wartości rzeczywistej. To działa, ale jest kodowane html:Filtr kątowy, który generuje html

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

muszę wdrożyć inny filtr do dekodowania html? Czy istnieje "kątowa" metoda robienia tego?

Odpowiedz

29

Musisz użyć ng-bind-html do renderowania html.

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

To powiedziawszy ... to naprawdę nie jest to, po co są filtry. Filtry są bardziej przeznaczone do szorowania danych zapisywanych w widoku, niż do generowania elementów samego widoku/DOM. Prawdopodobnie lepiej będzie dla ciebie stworzyć dyrektywę:

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

Oba działają świetnie! – Sucrenoir

+1

@ help W tym przypadku +1 również dla Ciebie :-) Odpowiadasz również na ogromną liczbę pytań! –

+0

Każdy powód, dla którego nie mogę zdefiniować mojej dyrektywy jako "prawdziwej ikony"? Czy nazwy dyrektyw są zawsze wielbłądami? – Sucrenoir

6

AngularJS domyślnie oczyszcza wyniki oceny ekspresji. Aby wyświetlić znaczniki HTML jak masz 2 opcje:

Powyższe sprawi, że filtr będzie działał, ale może warto rozważyć zamianę go na dyrektywę?

+0

+1 do was, ponieważ oboje powiedzieliśmy w zasadzie to samo ... i widzę was cały czas. –

+0

Myślę, że twoje linki nie są już ważne. – jcollum

Powiązane problemy