使用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 加载在运行时下载的组件

Angular2 - 将 div 添加到 DOM

Angular2动态插入脚本标签

Angular 2将html动态添加到DOM,样式不起作用[重复]

Angular2动态组件和TP jQuery库

Angular 2 将组件动态附加到 DOM 或模板