我有一个angularjs应用,我需要对字符串进行过滤(带有过滤器(以显示正确的HTML格式:
这个:
$scope.text = "This is <strong>GREAT</strong>";
需要:
这是很棒的
(以及其他HTML标签,例如<br>
,依此类推(
它应该通过过滤器工作,例如:
{{text | toHTML}}
我知道ng-bind-html
,但我需要通过过滤器而不是ng-bind-html
进行工作。
我找到了一些示例,其中需要为每个步骤构建过滤器(对于<a>
,有一个代码,对于<br>
,另一个是一个...(
有没有办法过滤示波器元素来处理HTML格式?
简短的答案是....这是无法完成的,这就是为什么ngBindHtml
首先存在
您要求将{{}}
的默认内部编译从插入文本节点转换为插入HTML元素
不管您在{{}}
内定义什么,您都无法更改以下事实:它始终将其插入文本节点,并且内部的任何HTML标签都不会转换为DOM元素。
此行为也有很好的XSS安全原因。通过插入文本,它可以防止从用户输入或损坏的数据源插入恶意脚本,iframe等
创建一个返回$sce.trustAsHtml
ED输入为输出的过滤器。
类似:
.filter('toHTML', ['$sce', function($sce){
return function(val) {
return $sce.trustAsHtml(val);
};
}])
编辑:如果您只能使用{{}}
渲染,恐怕这对您没有帮助。也许您可以创建一个为您进行element
级修改的directive
。
创建此过滤器如下
myApp.filter('unsafe', function($sce) {
return function(val) {
return $sce.trustAsHtml(val);
};
});
使用这样的过滤器
<p ng-bind-html="textCmt | unsafe"></p>