【问题标题】:How to compile/add HTML inside md-tooltip如何在 md-tooltip 中编译/添加 HTML
【发布时间】:2019-03-08 00:42:28
【问题描述】:

我正在尝试在 md-tooltip 中添加 HTML,但没有任何运气,即使使用 ng-bind-html。

不使用 ng-bind-html,工具提示输出:
Some html<br> <strong>card</strong>

有了它,我的 HTML 输出为字符串:
Some html<br><strong>card</strong>

在我的控制器中,我使用这个自定义过滤器来编译在 ng-repeat 中使用的 HTML:

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

此过滤器成功地适用于工具提示以外的其他元素。

工具提示写成:

<md-tooltip md-delay="1000" md-direction="bottom" class="tooltip-sort-display">
    <span ng-bind-html="categoryItem.ToolTip | unsafe">
</md-tooltip>

请注意,当我不使用 json 变量而是将静态文本添加到工具提示时,HTML 渲染没有问题

<md-tooltip md-delay="1000" md-direction="bottom" class="tooltip-sort-display">
    <strong>Tool</strong><br><em>tip</em>
</md-tooltip>


关于如何完成这项工作的任何想法?我会举一个例子,但我的 Angular 技能并不是那么先进。我主要是靠同事的工作做前端开发。

【问题讨论】:

  • 您在 devtools 控制台中是否遇到任何错误?
  • 您显示的代码没有问题,问题一定出在其他地方。证明:jsfiddle.net/sh0ber/goe0m1Lr
  • @sh0ber 在您的代码中,您没有使用特殊的 html 字符,这是问题的主要问题。用特殊字符检查你的小提琴:jsfiddle.net/raymo9j2
  • @The.Bear 使用特殊字符不是推荐的做法,它的可读性和额外的工作量都较小。查看文档示例 JS:docs.angularjs.org/api/ng/directive/ngBindHtml#examples
  • @sh0ber 我同意你的观点,最好避免使用它们,但在这种情况下,我刚刚为这种特殊情况提供了解决方案。谢谢。

标签: html angularjs json angularjs-ng-repeat angularjs-material


【解决方案1】:

在您的情况下,您的问题是您使用的是 HTML 特殊字符。如果没有,您的代码将正常工作。无论如何,如果您无法避免收到特殊字符,您可以在过滤器中添加解码:

JSFIDDLE DEMO

.filter('unsafeSpecial', function($sce) {
  return function(value) {
    var txt = document.createElement("textarea");
    txt.innerHTML = value;
    return $sce.trustAsHtml(txt.value);
  }
})

你可以这样使用:

HTML

<md-tooltip>
  <span ng-bind-html="msg | unsafeSpecial"></span>
</md-tooltip>

控制器

.controller('mainCtrl', function($scope) {
  $scope.msg = 'Some html&lt;br&gt;&lt;strong&gt;card&lt;/strong&gt;';
})


有关 decode html 主题的更多信息,如果需要,请检查此问题: HTML Entity Decode

【讨论】:

  • 此指令与ng-bind-html 基本相同,但没有$sce 安全检查。
  • 我已经更新了我的答案。我删除了指令,并在过滤器中添加了特殊字符解码。
  • 成功!我添加了新的过滤器,它起作用了。非常感谢@The.Bear
猜你喜欢
  • 2016-04-07
  • 1970-01-01
  • 1970-01-01
  • 2014-11-14
  • 2021-03-04
  • 1970-01-01
  • 2021-12-06
  • 2023-04-01
  • 1970-01-01
相关资源
最近更新 更多