最近在写业务时出了一个问题
场景:需要在Table上添加行点击事件,Table的某一列中有一个按钮,绑定了click事件。问题是在点击按钮触发click事件的同时,也触发了行点击事件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| <nz-table #basicTable [nzData]="dataSet"> <thead> <tr> <th>Name</th> <th>Age</th> <th>Address</th> <th>Action</th> </tr> </thead> <tbody> <tr *ngFor="let data of basicTable.data" (click)="goBasicDetail(data)"> <td>{{data.name}}</td> <td>{{data.age}}</td> <td>{{data.address}}</td> <td> <a (click)="goGoods()">Goods - {{data.name}}</a> <nz-divider nzType="vertical"> </nz-divider> <a>Delete</a> </td> </tr> </tbody> </nz-table>
|
拿上面的例子来说,点击a标签之后,触发goGoods()的同时也触发了goBasicDetail(data),这个不是我想要的。
经过半小时研究之后,快吐血了😵
只需要在带有click的列中,绑定$event.stopPropagation()事件就好了。。。
1 2 3
| <td (click)="$event.stopPropagation()"> <a (click)="goGoods()">Action 一 {{data.name}}</a> </td>
|
event.stopPropagation() 是用来阻止事件冒泡到父元素,阻止任何父事件处理程序被执行。
这样一来就通了,开始还以为Angular变更检测机制使DOM事件执行了多次。。看来还是理解不够深,加强基础知识!💪