如何在 Angular 中通过按钮点击事件获取父元素(即按钮自身)

在 angular 中处理按钮点击事件时,若事件目标(event.target)是子元素(如 ``),可通过 `event.target.parentnode` 快速获取其直接父级按钮元素,从而安全操作 dom 或调用相关方法。

在使用 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 获取事件绑定的目标元素(即