如何在Angular中convert/escapeHTML?

How to convert/escape HTML in Angular?

^ 以上是 term.search_preview 在我的模板中呈现的内容。

当前 HTML:

<div class="term-context-preview" value="{{term.term}}">
     <p ng-bind-html="term.search_preview">
         {{term.search_preview}}
     </p>
</div>

我已经 '$sce' 注入我的控制器:

.controller('TermsCtrl',
           ['$scope',
            '$sce',
            'TermsFactory',
            function($scope,
                     $sce,
                     TermsFactory) {

//vm.terms = is the terms array of objects that gets repeated in my widgets
vm.terms = TermsFactory.getTermsModel();

这就是term.search_preview的由来,vm.terms是一个包含数百个对象的数组。其中一个对象的示例:

0: {
    id: 1,
    term: 'term',
    search_preview: 'dsjfdsjkl dsfjdsk fjdksf dksj fdksj '
}

试过这个:

// Build terms widgets with ng-repeat:
vm.terms = $sce.getTrustedHtml(TermsFactory.getTermsModel());
console.log(vm.terms);

我得到的错误:
Error: [$sce:unsafe] Attempting to use an unsafe value in a safe context.

在我的 termsFactory 内部(我在其中处理和保存来自 JSON GET 调用的数据对象)

我遍历它们并在那里使用 $sce 创建了 trustAsHTML

的字符串

条款控制器:

// Set terms into data model:
TermsFactory.setTermsModel(data.data.ticker_tags);

// Build tag widgets with ng-repeat:
vm.terms      = TermsFactory.getTermsModel();
vm.totalTerms = vm.terms.length;

console.log(vm.terms);

TermsFactory:(这个用来遍历一个对象,把items变成strings然后反馈到要返回的对象中)

// Set data to terms:
var setTermsModel = function(data) {

    for (var i = data.length - 1; i >= 0; i--) {
        data[i].search_preview = $sce.trustAsHtml(data[i].search_preview);
    };

    terms = data;
    return terms;
};

然后在 HTML 文件中,使用 ng-bind-html:

修复了输出
<p ng-bind-html="term.search_preview">{{term.search_preview | filter:term.search_preview : limitTo : 200}}</p>

<section ng-show="context" ng-bind-html="context" class="term-context">
    <p>{{context}}</p>
</section>