使用Angular在HTML中呈现HTML实体字符串

时间:2015-03-31 13:10:52

标签: javascript angularjs html-entities ngsanitize

我从API接收HTML实体字符串(例如"<p> Some text <br />"),我希望它呈现为HTML。

如果我使用经典的HTML解决方案和sanitize:

.filter('html',function($sce){
  return function(input){
     return $sce.trustAsHtml(input);
  }
});

我获取&lt;p&gt; Some text &lt;br /&gt;作为字符串,而不是<p><br>被解释为HTML。

我现在看到的唯一解决方案是实现一些替换并在之后应用过滤器。

是否有更清晰的解决方案可以避免解析字符串两次?

2 个答案:

答案 0 :(得分:0)

不是使用替换,而是可以执行以下操作:

input = angular.element('<div/>').html(input).text();
return $sce.trustAsHtml(input);

答案 1 :(得分:0)

您可以创建一个解析html实体的过滤器,如下所示:

app.filter('trusted', ['$sce', function($sce) {
 var div = document.createElement('div');
 return function(text) {
     div.innerHTML = text;
     return $sce.trustAsHtml(div.textContent);
 };
}]);

在此之前,或多或少是你所说的。 但是现在,你可以这样做:

<div ng-bind-html="'&lt;p&gt; Some text &lt;br /&gt;' | trusted"></div>

OR

<div ng-bind-html="yourScopeVariable | trusted"</div>

它将呈现所需的HTML