我正在使用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
的最新值。
我希望它为每个{{1 }}。
我认为绑定事件的方式是错误的。请帮助我。
答案 0 :(得分:2)
将DOM附加到DOM树之后,您可以查询以item
id开头的所有DOM,同样,您也可以将querySelectorAll
与[id^="item"']
表达式一起使用,其中表示全部收集具有属性id
的元素以item
开头。 after循环分别遍历每个元素上的collection和bind事件。
let listItems = Array.from(this.elRef.nativeElement.querySelectorAll('*[id^="item"]'))
listItems.forEach((listItem, j) => {
this.renderer.listen(
listItem,
'click',
(evt) => {
this.myFunc(j);
}
);
})