阅读AngularJS tutorial step-9后 我创建了自己的AngularJS过滤器,它应该将布尔数据转换为html。
这是我的过滤器代码:
angular.module('phonecatFilters', []).filter('iconify', function () { // My custom filter
return function (input) {
return input ? '<i class="icon-ok"></i>' : '<i class="icon-remove"></i>';
}
});
这是我的HTML代码:
<dt>Infrared</dt>
<dd>{{phone.connectivity.infrared | iconify }}"></dd>
问题在于,borwser显示返回值的字面意思如下:
<i class="icon-ok"></i>
不是应该出现的图标(或渲染的html)。
我认为在这个过程中会发生一些消毒。
是否可以针对此特定过滤器关闭此清理功能?
此外,我知道如何通过不从过滤器返回HTML输出来显示图标,而只是“ok”或“remove”文本,然后我可以替换为:
<i class="icon-{{phone.connectivity.infrared | iconify}}"><i>
但这不是我想要的。
答案 0 :(得分:111)
您应该使用ng-bind-html
指令(要求导入sanitize模块和js文件):
https://docs.angularjs.org/api/ng/directive/ngBindHtml
<span ng-bind-html='phone.connectivity.infrared | iconify'></span>
您还需要导入CSS(我猜是Bootstrap)才能在图标工作时看到它。
我提供了working example。
答案 1 :(得分:17)
除非我读错了,否则你的方法是错误的
我认为ng-class是你需要这个工作的指令,比渲染到class属性更安全。
在您的情况下,只需添加id字符串作为类的对象字符串,并将值作为计算表达式
<i ng-class="{
'icon-ok':!phone.connectivity.infrared,
'icon-remove':phone.connectivity.infrared
}"></i>'
在旁注中,你应该只使用指令(内置和自定义)来操作html / dom,如果你需要更复杂的html渲染,你应该看看指令
答案 2 :(得分:12)
试试此过滤器
filter('trust', ['$sce',function($sce) {
return function(value, type) {
return $sce.trustAs(type || 'html', value);
}
}]);
var app = angular.module("myApp", ['ngSanitize']);