Depois de ler a etapa 9 do tutorial do AngularJS , criei meu próprio filtro AngularJS, que deve converter dados booleanos em html.
Aqui está o meu código de filtro:
angular.module('phonecatFilters', []).filter('iconify', function () { // My custom filter
return function (input) {
return input ? '<i class="icon-ok"></i>' : '<i class="icon-remove"></i>';
}
});
Aqui está meu código HTML:
<dt>Infrared</dt>
<dd>{{phone.connectivity.infrared | iconify }}"></dd>
O problema é que borwser exibe o valor retornado literalmente como:
<i class="icon-ok"></i>
não como ícones (ou html renderizados) que deveriam aparecer.
Acho que ocorre alguma higienização durante esse processo.
É possível desligar essa sanitização para este filtro específico?
Também sei como exibir ícones não retornando a saída HTML do filtro, mas apenas 'ok' ou 'remover' o texto que posso substituir por:
<i class="icon-{{phone.connectivity.infrared | iconify}}"><i>
mas não é isso que eu quero.
angular-sanitize.js
arquivo para que isso funcione. Se quiser fazer o mesmo sem incluir essa biblioteca extra, você pode usar ang-bind-html-unsafe
diretiva.ng-html-bind-unsafe
e exige que o conteúdo html seja explicitamente marcado como 'seguro' - consulte: docs.angularjs.org/api/ng.$sce#Example{{myContent | myFilter | html_safe}}
a menos que eu esteja lendo errado, você está abordando da maneira errada
Acho que ng-class é a diretiva necessária para este trabalho e é mais seguro do que renderizar para o atributo de classe.
no seu caso basta adicionar a string do objeto com as strings id como a classe e o valor como a expressão avaliada
em uma nota lateral, você só deve usar diretivas (integradas e personalizadas) para manipular html / dom e se precisar de um renderizador de html mais complexo, você deve olhar para a diretiva.
fonte
<i ng-class="phone.connectivity.infrared ? 'icon-ok' : 'icon-remove'"></i>
Experimente este filtro
requer angular-higienizar
Gist Link
fonte