AngularJS $sce.trustAsHtml() 在重标记的数据上

AngularJS $sce.trustAsHtml() on heavily tagged data

本文关键字:数据 sce trustAsHtml AngularJS      更新时间:2023-09-26

我知道$sce.trustAsHtml()可以让AngularJS按原样显示HTML。 经过一番坐立不安,我意识到这并非在所有情况下都有效。 特别是当该数据中包含其他标签时。

如果我使用简单的HTML标签(br,b等),它可以正常工作。但是,我有相当多的数据看起来像这样:

<div class="question">This is question1</div>
<div class="answerswer"> this is an answer1</div>
<div class="question">This is question2</div>
<div class="answerswer"> this is an answer2</div>

上面的条目是MySQL数据库中文本列的示例。 做以下事情,角呻吟:

Javascript:

$http.get(site_url).success(function(response) {
    $scope.textClean = $sce.trustAsHtml(response.text);
});

目录:

<div class="box" ng-bind-html="textClean"></div>

我尝试将其存储在其他标签中,但没有骰子。 关于可行的解决方法的任何想法? 当然,Angular可以处理这个问题。 如果我删除标签,它会显示,但当然,没有所需的特征。

编辑:哇 - 我的疏忽。 好的,我想通了这个问题。 我通过PHP脚本从MySQL数据库获取数据。 PHP 以 JSON 格式将其吐出。 由于类包含引号,因此错误发生在 $http.get() 部分...不在打印中。 我做了一些调试,让我相信并非如此,但显然我错了。 谢谢你的时间。

我创建了一个 plunker,显示

<div class="question">This is question1</div>
<div class="answerswer"> this is an answer1</div>
<div class="question">This is question2</div>
<div class="answerswer"> this is an answer2</div>

可以通过$sce.trurstAsHtml()解析

如果您的响应包含任何角度指令,则该角度指令将不起作用。为此,您需要使用$compile服务。