You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

mat-tab绑定click事件不生效 点击后如何触发自定义函数

问题原因

直接在<mat-tab>标签上绑定(click)事件不生效,是因为mat-tab是Angular Material封装的抽象组件,本身不会直接渲染为可响应点击的DOM节点,绑定的事件没有挂载到用户实际点击的标签头DOM元素上,自然无法触发。

可行实现方案

根据业务场景选下面任意一种写法即可:

方案1:用标签组自带的选中变化事件(官方推荐)

这是最稳妥的原生支持写法,当用户切换选中标签时会触发事件,判断选中的是目标标签时执行自定义函数即可。
模板代码:

<mat-tab-group (selectedTabChange)="handleTabSwitch($event)">
  <mat-tab label="Tools">
    <!-- Tools标签对应的内容 -->
  </mat-tab>
  <!-- 其他mat-tab标签 -->
</mat-tab-group>

组件类代码:

import { MatTabChangeEvent } from '@angular/material/tabs';

// 自定义的目标函数
aaa() {
  console.log('mat-tab')
}

handleTabSwitch(event: MatTabChangeEvent) {
  // 两种判断方式选一种即可
  // 1. 按标签索引判断,索引从0开始,对应mat-tab的书写顺序
  // if (event.index === 0) {}
  // 2. 按标签文本判断,不受标签顺序调整影响
  if (event.tab.textLabel === 'Tools') {
    this.aaa()
  }
}

方案2:自定义标签头模板直接绑定事件

如果需要点击已经处于选中状态的标签也能触发函数(上面的selectedTabChange在点已选中标签时不会触发),可以自定义标签头内容,直接在头内容上绑定点击事件。
模板代码:

<mat-tab>
  <!-- 自定义标签头,替换原来的label属性写法 -->
  <ng-template mat-tab-label>
    <div (click)="aaa()" style="width: 100%; height: 100%;">
      Tools
    </div>
  </ng-template>
  <!-- Tools标签对应的内容 -->
</mat-tab>

*注意:用这个写法的时候不要给<mat-tab>加label="Tools"属性,避免标签头重复渲染。内层div加全宽全高样式是为了让整个标签头区域都能响应点击,不会出现只有点文字才触发的问题。

避坑提醒

不要通过原生DOM查询的方式给mat-tab渲染后的节点硬绑事件,这种写法容易出现内存泄漏、Angular变更检测不触发的问题,优先用上面两种组件原生支持的方式实现。

内容的提问来源于stack exchange,提问作者das

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 06:57:21