我有一个AngularJS应用程序,我需要对字符串进行过滤(使用过滤器)以显示正确的HTML格式:
这是:
$scope.text = "This is <strong>GREAT</strong>";
需要:
这是伟大的
(以及其他HTML标记,如<br>
等)
它应该通过过滤器工作,例如:
{{text | toHTML}}
我知道ng-bind-html
,但我需要它通过过滤器工作,而不是使用ng-bind-html
。
我发现了一些需要为每个步骤构造过滤器的例子(对于<a>
有一个代码,对于<br>
有另一个.)
有没有一种方法可以过滤范围元素来处理HTML格式?
发布于 2017-04-26 03:47:31
简单回答is....this无法完成,这就是为什么ngBindHtml
首先存在的原因
您要求将{{}}
的默认内部编译从插入文本节点更改为插入html元素。
不管您在{{}}
中定义了什么,您都不能改变这样一个事实:它总是作为文本节点插入,并且它中的任何html标记都不会转换为dom元素。
这种行为也有一个很好的XSS安全原因。通过插入文本防止从用户输入或损坏的数据源插入恶意脚本、iframe等。
发布于 2017-04-26 02:18:26
创建一个过滤器,将$sce.trustAsHtml
ed输入作为输出返回。
类似于:
.filter('toHTML', ['$sce', function($sce){
return function(val) {
return $sce.trustAsHtml(val);
};
}])
编辑:如果您只能使用{{}}
来呈现,恐怕这不会对您有所帮助。也许您可以创建一个directive
来为您进行element
级别的修改。
发布于 2017-04-26 02:32:18
如下所示创建此过滤器
myApp.filter('unsafe', function($sce) {
return function(val) {
return $sce.trustAsHtml(val);
};
});
像这样使用过滤器
<p ng-bind-html="textCmt | unsafe"></p>
https://stackoverflow.com/questions/43631114
复制相似问题