如何在 ng-grid 中呈现 html 格式的内容?

How to render html formatted content in ng-grid?

我有包含 HTML 内容的 jsonData。我想在 ng-grid 中渲染 HTML。然而,内容并未呈现 - 它仅以普通字符串格式显示。

下面是显示所有代码的plnkr

http://plnkr.co/edit/RlWyDqCUUR15dmLM7ePV?p=preview

这里发生了一些事情:

  1. 与您的确切问题无关,但您的名字字段中嵌套了单引号。您需要进行一些转义,否则您的 ng-click 表达式将会中断。因此,您可以 ng-click=\"show('F:/cox/main.html')\".
  2. 而不是 ng-click='show('F:/cox/main.html')'
  3. 也与您的确切问题无关,但如果您想从 UI-Grid 内部访问控制器范围内的属性,则需要使用 appScope。它的文档在这里:http://ui-grid.info/docs/#/tutorial/305_appScope
  4. 从您的应用程序内部获取 HTML 以呈现的主要问题是严格的上下文转义。

严格上下文转义 (SCE) 在 Angular 中默认启用,并转义任意 HTML 以防止 XSS 和点击劫持之类的事情。为了让你的 HTML 出现,你需要 信任 它,并用 HTML 绑定表达式绑定它。

您可以使用 $sce 服务来信任 HTML。只需遍历您的行并执行 $sce.trustAsHtml(row.firstName)。 (您可以在此处阅读有关 SCE 的更多信息:https://docs.angularjs.org/api/ng/service/$sce)然后您将需要一个自定义单元格模板来绑定 HTML。最简单的看起来像这样:

<div class="ui-grid-cell-contents" ng-bind-html="COL_FIELD"></div>

COL_FIELD 将通过 UI-Grid 转换为适合您的字段的绑定。现在的问题是你的 ng-click 指令没有被编译。您需要使用一个指令来接受您的自定义 HTML 并编译它。你可以自己动手,或者使用类似这个库的东西来为你做:https://github.com/incuna/angular-bind-html-compile

要记住的主要事情是能够真正信任您的 HTML 的来源。如果您不能确定,那么换一种方式(即不在数据集中提供 HTML)会更好。

我已经修改了你的 plunker 以显示所有这些一起工作:http://plnkr.co/edit/MgLoeGBoRTi2fF3e6pia?p=preview