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

Angular 10中点击mat-stepper步进器标题触发onSubmit并显示告警的实现问题

实现方案

你可以通过自定义步进器标签的点击事件来实现需求,具体修改如下:


步骤1:改造第二个步进器的标签结构

将第二个mat-step原来的label属性替换为ng-template形式的matStepLabel,方便绑定点击事件。

步骤2:点击事件逻辑处理

点击第二个标签时先触发你已编写的onSubmit函数,同时触发表单校验状态更新,校验通过后再跳转至第二步。

步骤3:补充表单校验触发逻辑

在onSubmit函数中新增代码,将第一个表单的所有控件标记为已触碰状态,保证未填必填项显示红色错误边框。


修改后模板代码

<mat-horizontal-stepper [linear]="true" #stepper>
  <mat-step [stepControl]="firstFormGroup">
    <form [formGroup]="firstFormGroup">
      <ng-template matStepLabel>Fill out your name</ng-template>
      <mat-form-field>
        <mat-label>Name</mat-label>
        <input matInput placeholder="Last name, First name" formControlName="firstCtrl" required>
      </mat-form-field>
      <div>
        <button mat-button matStepperNext (click)="onSubmit()">Next</button>
      </div>
    </form>
  </mat-step>
  <mat-step [stepControl]="secondFormGroup">
    <!-- 自定义标签模板绑定点击事件 -->
    <ng-template matStepLabel>
      <span (click)="handleSecondStepClick(stepper)">Fill out your address</span>
    </ng-template>
    <form [formGroup]="secondFormGroup">
      <mat-form-field>
        <mat-label>Address</mat-label>
        <input matInput formControlName="secondCtrl" placeholder="Ex. 1 Main St, New York, NY"
          required>
      </mat-form-field>
      <div>
        <button mat-button matStepperPrevious>Back</button>
        <button mat-button matStepperNext>Next</button>
      </div>
    </form>
  </mat-step>
  <mat-step>
    <ng-template matStepLabel>Done</ng-template>
    <p>You are now done.</p>
    <div>
      <button mat-button matStepperPrevious>Back</button>
      <button mat-button (click)="stepper.reset()">Reset</button>
    </div>
  </mat-step>
</mat-horizontal-stepper>

TS代码补充

// 第二个步进器标签点击处理函数
handleSecondStepClick(stepper: MatHorizontalStepper) {
  // 调用你已经编写好的onSubmit函数
  this.onSubmit();
  // 第一个表单校验通过才跳转到第二步
  if (this.firstFormGroup.valid) {
    stepper.selectedIndex = 1;
  }
}

// 原有onSubmit函数补充以下代码,触发错误样式显示
onSubmit() {
  // 新增:将第一个表单所有控件标记为已触碰,未填字段自动显示红色边框
  this.firstFormGroup.markAllAsTouched();
  // 你原来的业务逻辑、告警提示逻辑保留即可
  // ...
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:06:03