【发布时间】:2019-02-07 16:23:41
【问题描述】:
我正在使用 Angular 4+,import { Component, ElementRef, Renderer2 } from '@angular/core';
我已经成功生成了一系列元素:
const parentList = this.renderer.createElement('ul');
let children = '';
for(let i=0; i<totalItem; i++) {
children += '<li id="item'+i+'">'+item.name+'</li>';
}
parentList .innerHTML = children;
this.renderer.appendChild(
this.elRef.nativeElement.querySelector('.wrapper'),
parentList);
使用renderer.listen,如何通过迭代将点击事件绑定到所有创建的li?
我的尝试:
for(let j=0; j<totalItem; j++) {
let listener =
this.renderer.listen(
this.elRef.nativeElement.querySelector('#item'+j),
'click',
(evt) => {
this.myFunc(j);
}
);
}
.....
myFunc(id) {
alert(id);
}
问题是每次点击li 都会在迭代完成后提醒j 的最新值。
我希望它为每个li 提醒不同的id。
我认为我绑定事件的方式是错误的。请帮帮我。
【问题讨论】:
-
您应该在
li上使用(click)。 -
在 html 字符串中写入 (click)="myFunc(i)" 时事件未绑定
-
您在将其添加到 DOM 之前是否对其进行了清理?
-
可能有更好的方法来做到这一点。顺便说一句,您到底想在这里实现什么?
-
@SiddharthAjmera 我想将点击事件绑定到一些动态创建的元素以触发一个函数,该函数的参数取决于点击的元素