【问题标题】:ng-bind-html with angular-translate renders text instead of HTML tag带有 angular-translate 的 ng-bind-html 呈现文本而不是 HTML 标记
【发布时间】:2018-06-15 09:01:14
【问题描述】:

我回到了一个带有 angular-translate 的旧 AngularJS 项目 (1.7.2),我正在为 ng-bind-html 苦苦挣扎。

在我的 HTML 中我写了这个

<span ng-bind-html="'LEFT_PANEL.VISITED_AFTER' | translate"></span>

我期待的结果是

<span>Visited <strong>after</strong> this date. </span>

我的翻译文件中有:

"VISITED_AFTER": "Visited <strong>after</strong> this date"

我实际得到的是:

<span ng-bind-html="'LEFT_PANEL.VISITED_BEFORE' | translate" class="ng-binding ng-scope">
Visited &lt;strong&gt;before&lt;/strong&gt; this date
</span>

我做错了什么?

(是的,我的模块中有ngSanitize

谢谢

【问题讨论】:

    标签: angularjs angular-translate ng-bind-html


    【解决方案1】:

    NgTranslate 正在使用它自己的 Sanitizer (Docs)

    要全局更改清理策略,请使用$translateProvider.useSanitizeValueStrategy("STRATEGY"); 如果您只想对此元素使用不同的策略,请使用属性translate-sanitize-strategy

    【讨论】:

    • 你是对的!我正在使用“逃避”策略。转移到“sce”工作。
    【解决方案2】:

    this 可能重复。

    似乎与 HTML 解码有关。 添加此功能:

    function decodeHtml(html) {
      var txt = document.createElement("textarea");
      txt.innerHTML = html;
      return txt.value;
    }
    

    并围绕您要打印的内容:decodeHtml(...)

    其实看看这个plunkr

    【讨论】:

    • decodeHtml 函数似乎不是 Angular 的一部分,而是直接操作 DOM,我想避免这样做
    • 查看已编辑的答案,只需查看 plunkr。应该可以从那里弄清楚。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多