0

我的范围中有一个字符串,但我并不总是知道是否要转义 HTML。本质上,我有一个布尔值,它会说明 HTML 是否应该被转义。

代码

这是我的一些示例代码:

$scope.result = "<b>foo</b>bar";
$scope.html = false; // In this case the HTML *would* be escaped

这是插入 HTML 的情况,如下所示innerHTML

$scope.result = "<strike>foo</strike>bar";
$scope.html = true; // The HTML would be escaped

我尝试过的其他解决方案

我不确定执行此操作的“Angular 方式”是什么,虽然我想到了使用 hack 的方法.removeAttribute,但我发现这非常hacky,必须有更好的方法。

4

2 回答 2

1

一个例子是这样的:

<p ng-bind-html-unsafe="data.markupData"></p>

使用 ng-repeat 进行迭代也很简单:

<div ng-repeat="item in items">
  <p ng-bind-html-unsafe="item.markupData"></p>
</div>

1.新建控制器

var ExampleCtrl = function($scope) {
}

在您的 HTML 中:

<div ng-repeat="example in Examples" ng-controller="ExampleCtrl">
  <p ng-bind-html="trustedExample"></p>

<hr />

</div>

2. 将 Strict Contextual Escaping 服务添加到您的控制器

var ExampleCtrl = function($scope, $sce) {

}

3. 对数据使用 $sce.trustAsHtml 函数

var ExampleCtrl = function($scope, $sce) {
  $scope.trustedExample = $sce.trustAsHtml($scope.example);
}

我希望这个能帮上忙

于 2016-01-02T04:48:57.883 回答
0

这样做的一种“角度”方式是编写一个filter接受html和布尔值并返回转义/未转义的html的方法。

这是关于如何编写 dngular 过滤器的基本教程:https ://docs.angularjs.org/tutorial/step_09

关于如何 excape html,请尝试使用$sanitizehttps ://docs.angularjs.org/api/ngSanitize/service/ $sanitize

于 2016-01-02T04:35:00.073 回答