使用angular2将HTML从服务器插入DOM(Angular2中的一般DOM操作)[重复]
Posted
技术标签:
【中文标题】使用angular2将HTML从服务器插入DOM(Angular2中的一般DOM操作)[重复]【英文标题】:Inserting HTML from server into DOM with angular2 (general DOM manipulation in Angular2) [duplicate] 【发布时间】:2015-09-17 17:36:55 【问题描述】:我想将从服务器检索到的一些 html 插入到 angular2 中的 DOM 元素中。我似乎无法找出最好/正确的方法来做到这一点。
我不能只将 my_data 放入模板中,因为 Angular 2 会自动转义 HTML。
我试图编写一个 html-unsafe 指令,它只是将一个值直接分配给一个元素的 innerHTML:
/// <reference path="../../typings/typings.d.ts" />
import Directive from 'angular2/angular2';
import ElementRef from 'angular2/core';
@Directive(
selector: "[html-unsafe]",
properties: ['htmlUnsafe']
)
export class HtmlUnsafe
constructor(private elem: ElementRef)
set htmlUnsafe(value)
setTimeout(() =>
this.elem.nativeElement.innerHTML = value;
,0);
所以现在在我的模板中我有类似的东西
<td [html-unsafe]="my_data"></td>
这可行,但我不确定这是正确的方法,并且 setTimeout 似乎是一个奇怪的解决方法。如果没有 setTimeout,this.elem.nativeElement
似乎实际上并不是指 DOM 元素,而是指某种临时元素。
有没有更“正确”的 angular2 方式来简单地将 HTML 插入 DOM?为什么我需要将 DOM 操作包装在 setTimeout 中?
【问题讨论】:
【参考方案1】:从 2014 年 11 月开始阅读这篇文章 http://www.beyondjava.net/blog/angularjs-2-0-sneak-preview-data-binding/。
ng-bind-html becomes [innerHTML].
你可以试试这个。
【讨论】:
虽然这适用于像 Hello! 这样的简单 HTML 标签,但它不适用于您自己创建的 Angular 指令。在 Angular 1.x 中,您使用了 $sce.trustAsHTML() 和一个名为 $compile 的自定义指令来编译 HTML 中的 Angular 指令。我们需要知道 Angular 2 中的等价物。 我认为现在是[innerHTML]
。
@VernJensen 我对自定义指令也有同样的问题,你解决了吗?
不,我意识到,出于我的目的,我可以使用 *ngFor 循环来迭代一系列自定义对象,这些对象指定我想要的 HTML 元素,循环内包含一系列 *ngIf 语句-- 我希望能够创建的每个 HTML 指令都有一个。 (例如,一个用于 【参考方案2】:
我可以通过以下方式做到这一点:
<td bind-inner-html="my_data"></td>
【讨论】:
我认为现在是[innerHTML]
。以上是关于使用angular2将HTML从服务器插入DOM(Angular2中的一般DOM操作)[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Angular 2 - 使用 ComponentResolver 加载在运行时下载的组件