AngularJS中如何绑定html内容

问题

AngularJS中,通过ng-model为DOM绑定的值默认显示为文本,即使绑定的值中含有HTML标签,也会被解析成安全字符串显示为常量。
但是,如果我们就是希望此DOM以HTML方式显示绑定的内容,该怎么办呢?

解决方案

我推荐使用ng-bind-html命令 + 筛选器的方式,这样使代码比较清楚明了。
请看下述例子:

<div class="msg-item-detail" ng-bind-html="messageItem.content|to_html">

上述代码中,为此DIV绑定了messageItem.content的值,并且使用了筛选器”to_html”,

看看“to_html”是如何实现的吧:

define(function (require, exports,module ) {
    module.exports = function(app){
        app.register.filter('to_html', ['$sce',
            function ($sce) {
                return function (text) {
                    return $sce.trustAsHtml(text);
                };
            }
        ]);
    }
});

此时,你还需要搞懂传入的text变量是否从其它地方来,是否来源于其它的输入框,假如真如此的话,

那一旦用户在输入框输入了script标签并且alert了一些东西,

那么,在这里,这些js就会被执行。

所以使用ng-bind-html方法来绑定数据时需要谨慎,必要的时候可先对text进行htmlEncode

  function textEncode(str) {
                    str = str.replace(/&amp;/gi, '&');
                    str = str.replace(/</g, '&lt;');
                    str = str.replace(/>/g, '&gt;');...
                    return str;
  }

我通常使用的方法是利用jquery将特殊字符过滤。如果 str = ‘你好<script>alert(1)</script>’

我只需要执行 str = $('<div>').text(str).html(); 就可以解决此问题了,此时可以将str作为参数传入$sce.trustAsHtml(str)中了。


effevo技术团队出品 (https://effevo.com
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值