如何避免使用$ sce进行双重编码

时间:2014-08-15 20:06:23

标签: angularjs angularjs-scope

Angular $ sce服务似乎是编码字符而信任html。是否可以选择让html受信任?

$scope.text = $sce.trustAsHtml('it's broken')

一个例子。

<p>it&#39;s working</p>
<p>{{ text }}</p>

看起来像。

it's working
it&#39;s broken

我宁愿不使用ng-bind-html,因为它意味着在以下过滤器中使用。

{{ text | render }}

1 个答案:

答案 0 :(得分:0)

对你的html进行编码不是$sce,实际上什么也没有。

但是当你使用插值{{ text }}时,angular会检测到并通过textNode.nodeValue将其替换为正确的值,而不是innerHTML。因此,您的&#39;将被视为普通文本,而不是编码的HTML实体。

这就是ng-bind-html存在的原因,没有什么可以阻止您在ng-bind-html表达式中使用过滤器。

<div ng-bind-html="text | render | trustAsHtml"></div>

示例过滤器:

.filter('render', function () {
  return function (value) {
    return value + '!';
  };
})

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

示例Plunker: http://plnkr.co/edit/F8OQvoSzOR06TPepc2Fo?p=preview