我在点击时ngFor
与jQuery
合作时遇到问题。这里的问题是(我认为),在ngFor完成渲染之前,jquery附加到DOM。这是plnkr。如您所见,如果您单击任何硬编码为html的li
元素,控制台日志将触发('clicked on li
')。但是,如果单击ngFor
创建的html,它将不再触发控制台日志。
我能做些什么,让它适用于ngFor创建的HTML?
由于
答案 0 :(得分:2)
这是因为您在实际收到数据之前注册了点击处理程序。它们使用HTTP请求异步加载。
如果您在此之后注册处理程序并且视图刷新,您将在控制台中看到消息:
constructor(private myService: MyService){
console.log('myArr before', this.myArr);
myService.getAsync().subscribe(success=>{
this.myArr = success;
console.log('myArr received');
});
}
registerClickHandler() {
$('li').on('click', function(e) {
console.log('clicked on li');
});
}
那就是说,你应该使用Angular2的事件支持:
<ul>
<li *ngFor="#obj of myArr" (click)="logClick(obj)">{{obj.name}}</li>
</ul>
请参阅此plunkr:http://plnkr.co/edit/aAmUQL?p=preview。