javascript - 如何在innerHTML Angular 2中绑定(bind)点击事件/函数?

标签 javascript angular innerhtml

我有一个innerHTML,如下所示:

getWidgetItem(widgetId: any) {
      this._widgetId = widgetId;
      this.widgets = [{'name': 'Welcome'}, {'name': 'Welcome1'}, {'name': 'Welcome2'}];
      this.newArray = this.widgets.map((obj) => {
        let htmlText = `
          <div>
            <section class="page subpage dashboard dashboard-page" style="overflow-y:hidden;">
                <div class="newDashbaord">
                  <header>
                      <div class="actions">
                          <button class="control-btn borderless close-btn">
                              <span #target class="icon-close action-icon" (click)="RemoveWidget(${obj})"></span>
                          </button>
                      </div>
                      <h1 class="table-heading">${obj.name}</h1>
                  </header>
                    <main>
                    </main>
                </div>
            </section>
          </div>`;
          return htmlText;
      });
  }

但问题是,我无法从我的跨度访问点击事件。

我有一个函数调用如下:

private RemoveWidget(widget:any) {
    if (typeof widget != 'undefined' && typeof this.widgets != 'undefined'){
      console.log('CALLEDe', widget);
      let index: number = this.widgets.indexOf(widget);
      if (index !== -1) {
          this.widgets.splice(index, 1);
      }
    }
  }

我尝试过:

ngAfterContentInit(): void {
        // console.log('target called', this.elementRef.nativeElement.querySelector('span'));
        this.renderer.listen(this.elementRef.nativeElement, 'click', (event) => {
            console.log('event called??', event);
            // this.RemoveWidget(event);
        });
  }

但是我从我的 templateUrl 中得到了一个跨度。无法访问我的 insideHTML 范围中的范围。我怎样才能访问它?

最佳答案

你真的应该使用 Angular 的模板引擎。

您无需尝试通过脚本添加 html,只需在直接 html 中使用 *ngFor 即可实现您想要的结果。

some-file.html

<div *ngFor="let widget of widgets">
  <section class="page subpage dashboard dashboard-page" style="overflow-y:hidden;">
    <div class="newDashbaord">
      <header>
        <div class="actions">
          <button class="control-btn borderless close-btn">
            <span #target class="icon-close action-icon" (click)="RemoveWidget(widget)"></span>
          </button>
        </div>
        <h1 class="table-heading">widget.name</h1>
      </header>
      <main>
      </main>
    </div>
  </section>
</div>

The NgFor directive instantiates a template once per item from an iterable. The context for each instantiated template inherits from the outer context with the given loop variable set to the current item from the iterable.

关于javascript - 如何在innerHTML Angular 2中绑定(bind)点击事件/函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44407771/

相关文章:

ios - *ngIf 无法在使用 Nativescript 的 iOS 平台上工作

javascript - 事件​目标​.add​事件​Listener() 在innerHTML之后不起作用

javascript - 在 NodeJS api 服务器中从客户端获取 JSON 内容

javascript - 如何将此 jQuery 函数转换为 'if' 语句

javascript - 使用带有 Angular 2 组件的 flexbox

javascript - 将日期/时间转换为时间戳

JavaScript innerHTML 创建空白页面

javascript - 为什么通过 innerHTML 添加元素时我的动画是 "replayed"?

javascript - 如何在 html5 中构建表单时显示警告标志?

javascript - 如何使用 raphael js 添加额外的路径箭头到指针路径