Angular 2:如何在不向用户显示标签的情况下从JSON响应中呈现HTML?

Jos*_*osh 93 javascript json angular

编辑:澄清任何只撇去标题的人,我的问题是关于Angular 2,而不是1.


我有一个组件模板,如下所示:

<div>{{ post.body }}</div>
Run Code Online (Sandbox Code Playgroud)

对象是这样的:

{
    "title": "Some Title",
    "body": "<p>The <em>post body</em>.</p>"
}
Run Code Online (Sandbox Code Playgroud)

而不是像下面那样渲染段落:

帖子体

它显示:

"<p>The <em>post body</em>.</p>"

由于它是如此常见的任务,我寻找一个内置的管道,{{ post.body | safe }}但没有看到一个.

是否有一种简单的方法可以实现这一目标?是否有一种安全的方法来实现这一目标?

Sas*_*sxa 204

在Angular2中,您可以使用属性绑定来访问DOM元素的属性,在您的情况下:

<div [innerHTML]="post.body"></div>
Run Code Online (Sandbox Code Playgroud)

  • 如果你在Angular 4中使用`[innerHTML] ="yourHtml"`绑定到html,它将清理字符串并删除任何<script>标记:https://angular.io/guide/security#sanitization-and-security-contexts (13认同)
  • 但你不应该这样做https://angular.io/docs/ts/latest/guide/security.html#!#xss (5认同)
  • @CSchulz然后应该是什么样的安全方式 (4认同)
  • 只有在确定源是可信的时才应该这样做. (3认同)
  • @ibgib是的,你不再需要了它,Angular现在默认清理html内容:https://angular.io/guide/security#sanitization-and-security-contexts (2认同)