Angular 12.1 使用打字稿添加 html 元素

Log*_*erv 7 javascript typescript angular

我正在通过 youtube 学习 angular,但我正在尝试做一些新的事情,但我遇到了一个错误,我的代码附在下面,帮帮我。

我想像这样设置属性,div.setAttribute('(click)',"popUp($event)");但出现错误。

打字稿

export class AppComponent {
    createEl(){
      console.time("timer");
      for (let i = 0; i < 10; i++) {
        let div = document.createElement("div");
        div.textContent = `Hello, World! ${i}`;
        div.setAttribute('(click)',"popUp($event)");
        document.getElementById('divEl')?.appendChild(div);
      };
      console.timeEnd("timer");
}
Run Code Online (Sandbox Code Playgroud)

HTML

<div id="divEl"></div>
<button (click)="createEl()">click me</button>
Run Code Online (Sandbox Code Playgroud)

错误

我的错误照片

Cal*_*mmm 7

这并不是真正的有角的做事方式。尽量避免对诸如document.createElement.

实现这一点的更好方法是定义模板中重复元素的外观并从数组中驱动它。这样我们就可以让模板做显示,打字稿做处理,Angular 处理两者之间的一切。

HTML

<div id="divEl">
  <div *ngFor="let row of rows; index as i;" (click)="popUp($event)">
    Hello, World! {{i}}
  </div>
</div>

<button (click)="createEl()">click me</button>
Run Code Online (Sandbox Code Playgroud)

打字稿

export class AppComponent {
  rows: unknown[] = [];
  createEl():void {
    this.rows.push('something');
  }

  popUp(event:Event):void {}
}  
Run Code Online (Sandbox Code Playgroud)

更多关于循环的阅读:https : //angular.io/api/common/NgForOf

  • 什么需要更多时间、执行时间或代码编写?无论哪种方式,这是以角度构建模板更新的合适方法 (2认同)
  • 这仍然是在 Angular 中执行此操作的合适方法。是的,在此示例中执行时间可能会更慢,但是当您开始使用其他 Angular 模板功能时,开销不会增加。 (2认同)

Bri*_*ani 4

下面检查一下就对了。

div.addEventListener('click', (e) => {
  this.popUp(e);
});
Run Code Online (Sandbox Code Playgroud)