如何使AngularJS输出转义的HTML

10 浏览
0 Comments

如何使AngularJS输出转义的HTML

我从服务器获取JSON数据,其中一个字段包含转义的HTML(实际上是一封电子邮件的正文):

<html>\r\n<head>\r\n<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">\r\n</head>\r\n<body dir="auto">\r\n<div>Buonasera, ho verificato i dati sul mio account ed il numero di cell che vi ho fornito</div>\r\n<div><br>\r\n<a(更多内容...)

我试图使用AngularJs渲染它却疯狂了。

以下代码不起作用:


我认为这是正常的,因为HTML实际上是转义的。

我应该先取消转义吗?Angular能否通过某个可用的服务来取消转义HTML?

如果我像这样使用$sce:

scope.mail.htmlbody = $sce.trustAsHtml(scope.mail.htmlbody);

源HTML将被显示,检查元素时我可以看到内容被引用。换句话说,在页面上显示源HTML而不是渲染的HTML。也许我漏掉了什么?

0
0 Comments

在使用AngularJS时,有时我们需要输出转义后的HTML内容。下面是解决这个问题的方法:

首先,我们可以使用ng-bind-html指令来实现。具体代码如下:

但是要注意,需要在应用模块中使用angular sanitize。可以参考文档http://docs.angularjs.org/api/ngSanitize

具体操作是,在你的应用模块中添加ngSanitize模块,代码如下:

angular.module('myApp', ['ngSanitize']);

同时,还需要引入angular-sanitize.js脚本文件。可以从ajax.googleapis.com/ajax/libs/angularjs/1.5.5/…(或其他版本)获取。没有这些,ng-bind-html指令将无法正常工作。

希望这对你有所帮助。

0
0 Comments

当AngularJS版本升级到1.2时,引入了$sce服务,并且不再支持ng-bind-html-unsafe指令。新的指令是ng-bind-html。如果使用新的指令,代码应该按照文档的说明工作:

<div ng-bind-html="mail.htmlbody"></div>

如果我不想覆盖其他内部HTML,并且不能为自定义文本创建span标签,该怎么办?

解决方法是使用ng-bind-html的安全版本,即通过$sce服务将HTML进行转义输出。实现方法如下:

1. 在控制器中注入$sce服务:

app.controller('myCtrl', function($scope, $sce) {
  // 控制器代码
});

2. 在需要输出HTML的地方,使用$sce.trustAsHtml方法将HTML进行转义:

$scope.mail.htmlbody = $sce.trustAsHtml('

这是要输出的HTML内容

');

3. 在HTML模板中使用ng-bind-html指令来输出转义后的HTML:

<div ng-bind-html="mail.htmlbody"></div>

通过以上步骤,就可以实现AngularJS输出转义后的HTML内容的需求。

0