AngularJs:如何在HTML中解码HTML实体?
AngularJs:如何在HTML中解码HTML实体?
情况:
我正在建立一个网页,其中的内容是通过调用一个返回json格式数据的API来获取的。
问题是HTML标签以HTML实体的形式给出,需要解码。
示例:
这是我处理的json的示例:
<p align="justify"><strong>15<sup>th</sup> HERE THERE IS A BOLD TEXT </strong> HERE SOME NORMAL TEXT...
尝试:
我花了时间进行研究,发现这比我想象的要困难。在谷歌和类似的SO问题中查找,一个可能的解决方案是使用ng-bind-html。
API调用:
$http.get('http://API/page_content').then(function(resp) { $scope.content_test = resp.data[0].content; }
过滤器:
.filter('trusted', ['$sce', function($sce){ return function(text) { return $sce.trustAsHtml(text); }; }])
在Angular视图中使用ng-bind-html:
输出:
这是在视图中的输出(与您看到的完全一样):
15th<\/sup> HERE THERE IS A BOLD TEXT<\/strong> HERE SOME NORMAL TEXT...
但我想看到的是文本被适当格式化的结果:
HERE THERE IS A BOLD TEXT HERE SOME NORMAL TEXT...
问题:
如何在AngularJs中解码HTML实体并将其显示为适当格式的HTML?
问题的出现原因:需要在AngularJs中对HTML实体进行解码,以便正确显示在页面上。
解决方法:添加angular.sanitize.js文件,并将其作为依赖注入到应用程序中。然后使用ng-bind-html指令将解码后的HTML字符串传递给页面中的元素。
以下是解决方法的代码示例:
// 添加angular.sanitize.js文件 // 添加依赖注入 var app = angular.module('plunker', ['ngSanitize']); // 解码HTML字符串并传递给ng-bind-html $http.get('http://API/page_content').then(function(resp) { var html = resp.data[0].content; var txt = document.createElement("textarea"); txt.innerHTML = html; $scope.content_test = txt.value; // 如果使用jQuery,可以使用以下代码 //$scope.content_test = $('').html(html).text(); }); // 在页面中使用ng-bind-html指令显示解码后的HTML内容
通过上述方法可以实现解码HTML实体并正确显示在页面上。
问题的原因是需要在将内容传递给$sce之前进行一步“解码”的操作。以下是解决方法:
app.filter('trusted', ['$sce', function($sce) { var div = document.createElement('div'); return function(text) { div.innerHTML = text; return $sce.trustAsHtml(div.textContent); }; }]);
演示:[http://plnkr.co/edit/LrT4tgYtTu4CPrOAidra?p=preview](http://plnkr.co/edit/LrT4tgYtTu4CPrOAidra?p=preview)
信任-不要信任,验证。这对我不起作用。