AngularJS HTML filter



我有一个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>

最新更新