【问题标题】:Append a HTML tag to dynamically created DOM in Angular 2将 HTML 标记附加到 Angular 2 中动态创建的 DOM
【发布时间】:2017-12-01 07:11:30
【问题描述】:

我有动态创建的表头,如何使用类名访问它并以纯角度方式附加一个 HTML 标记

之前

<div class="column-header">Header</div>

之后

<div class="column-header">Header<span>Some value</span></div> 
import { Directive, ElementRef, Input, ViewChild, OnInit, Renderer2 } from "@angular/core";

@Directive({ selector: 'column-header' })
export class ColumnDirective implements OnInit {
    elem: ElementRef;

  constructor(private renderer: Renderer2, private el: ElementRef) {
      this.elem=el;
  }

  ngOnInit() {

  }

  ngAfterViewInit() {
    const span1 = "<span class='mytooltip ico-help fa fa-question-circle'>";
    const span2 = "<span class='tooltiptext'>Question</span>";
    setTimeout(() => {
        this.renderer.appendChild(span1,span2);
        this.renderer.appendChild(this.el.nativeElement, span1);
    }, 0);
  }
}

我不想使用任何 jquery 来附加标签,我尝试按照上述方法但没有帮助。是否有角度的方式来执行预期的结果?

【问题讨论】:

  • 您的指令与 BeforeAfter 中的 HTML 有什么关系?
  • 它的前面 div 的类名 @GünterZöchbauer
  • 您的代码没有显示。请更新您的问题。
  • 完成,抱歉

标签: angular angular2-template angular2-directives angular-datatables


【解决方案1】:

我发现您采用的方法存在一些问题,即声明一个

const span1 = "&lt;span class='mytooltip ico-help fa fa-question-circle'&gt;";

它不会帮助您创建 HTML 标记。它只是一个简单的字符串,没有别的。

您可以尝试以下方法:

首先识别你的'div'标签,它包含标题:

<div #header1>Header </div>

一旦你有了它,你需要做的就是使用“@ViewChild”在你的 TypeScript 文件中读取这个元素,如下所示:

@ViewChild('header1') d1: ElementRef;

@ViewChild 是一种优雅的打字稿方式,可以从代码中获取任何 html dom 并在您的代码中使用它。
完成在代码中获取元素后,您需要做的就是将代码附加到此,如下所示:

this.d1.nativeElement.insertAdjacentHTML('beforeend', '<span>Some value</span>');

【讨论】:

  • 我们可以用类名而不是 id 试试吗?因为我无法将 id 分配给动态创建的 DOM
  • 我的表有一个 id #mytable 但我不能有一个表头
  • 使用 ID 访问元素的想法是获取与其关联的唯一 DOM 树。您可以使用类名定义地加载它,只要那是您的代码中关联的单个类。在您的情况下,您要将其附加到“div”标签,这使得访问变得困难,因为可能会有数千个“div”标签。如果您分享您如何动态生成标头,我也许可以为您提供更多帮助??
  • hjalmers.github.io/angular-generic-table/advanced,目前正在使用此数据表,但无法将任何 HTML 标记附加到列标题,这就是问题
  • 我不认为使用通用表会帮助您实现您想要实现的目标,因为 1) 它只接受您的列名,然后在内部将其呈现给通用表。 2)输入列名,你给的只是字符串,后面会和列名相关联。
猜你喜欢
  • 2018-12-05
  • 2016-04-23
  • 2016-07-29
  • 1970-01-01
  • 1970-01-01
  • 2019-02-22
  • 2018-02-14
  • 2018-02-25
  • 2022-01-02
相关资源
最近更新 更多