
在 angular 中处理按钮点击事件时,若事件目标(event.target)是子元素(如 `
在使用 Angular Material 的 mat-icon-button 时,HTML 渲染后实际的点击事件目标(event.target)往往不是
要准确获取包裹图标的父
download(event: MouseEvent) {
const parentButton = event.target instanceof Node
? event.target.parentNode
: null;
if (parentButton && parentButton instanceof HTMLElement && parentButton.tagName === 'BUTTON') {
console.log('Found parent button:', parentButton);
// ✅ 安全执行后续逻辑,例如添加 loading 状态、禁用按钮等
} else {
console.warn('Parent is not a BUTTON element');
}
}⚠️ 注意事项:
- event.target.parentNode 返回的是直接父节点(Node 类型),需校验是否为
- 更健壮的做法是结合类型守卫(如 instanceof HTMLElement)和标签名判断,防止 parentNode 为 null 或非预期元素;
- 若未来组件结构升级(例如按钮内嵌多层容器),可改用 event.currentTarget(始终指向绑定事件的元素,即
download(event: MouseEvent) {
// ✅ 推荐:event.currentTarget 始终等于绑定 (click) 的 button 元素
const button = event.currentTarget as HTMLButtonElement;
console.log('Bound button:', button);
}✅ 总结:优先使用 event.currentTarget 获取事件绑定的目标元素(即










