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

在Angular中如何通过添加按钮新增乘客信息输入字段?

点击按钮动态新增乘客信息输入字段实现方案

你当前使用的是Angular + Angular Material技术栈,使用Angular响应式表单的FormArray能力即可快速实现需求,具体实现步骤如下:

  • 第一步:在对应的Angular模块中导入响应式表单依赖
    在你的模块文件中引入:
import { ReactiveFormsModule } from '@angular/forms';

并将ReactiveFormsModule添加到@NgModule的imports数组中。

  • 第二步:编写组件逻辑代码
import { Component } from '@angular/core';
import { FormBuilder, FormGroup, FormArray, Validators } from '@angular/forms';

@Component({
  selector: 'app-passenger-form',
  templateUrl: './passenger-form.component.html',
  styleUrls: ['./passenger-form.component.scss']
})
export class PassengerFormComponent {
  passengerForm: FormGroup;

  constructor(private fb: FormBuilder) {
    // 初始化表单,默认自带1组乘客输入字段
    this.passengerForm = this.fb.group({
      passengers: this.fb.array([this.createPassengerGroup()])
    })
  }

  // 创建单组乘客信息的表单结构
  createPassengerGroup(): FormGroup {
    return this.fb.group({
      name: ['', Validators.required], // 姓名
      address: ['', Validators.required], // 地址
      phone: ['', [Validators.required, Validators.pattern(/^1[3-9]\d{9}$/)]], // 联系电话,可自行调整校验规则
      email: ['', [Validators.required, Validators.email]] // 邮箱
    })
  }

  // 快捷获取存储所有乘客信息的FormArray
  get passengers(): FormArray {
    return this.passengerForm.get('passengers') as FormArray;
  }

  // 点击添加按钮触发的方法,新增一组乘客输入字段
  addPassenger(): void {
    this.passengers.push(this.createPassengerGroup());
  }
}
  • 第三步:调整模板代码
<form [formGroup]="passengerForm">
  <!-- 遍历渲染所有乘客输入组 -->
  <div formArrayName="passengers" *ngFor="let passenger of passengers.controls; let i = index">
    <div [formGroupName]="i" class="passenger-item">
      <mat-form-field appearance="fill">
        <mat-label>乘客姓名</mat-label>
        <input matInput formControlName="name">
      </mat-form-field>
      <mat-form-field appearance="fill">
        <mat-label>乘客地址</mat-label>
        <input matInput formControlName="address">
      </mat-form-field>
      <mat-form-field appearance="fill">
        <mat-label>联系电话</mat-label>
        <input matInput formControlName="phone">
      </mat-form-field>
      <mat-form-field appearance="fill">
        <mat-label>邮箱</mat-label>
        <input matInput formControlName="email">
      </mat-form-field>
    </div>
  </div>

  <!-- 你的原有添加按钮,仅需要补充click绑定即可 -->
  <div class="center">
    <button
    type="button"
    class="next-button"
    mat-flat-button
    matTooltip="Add new passenger"
    matTooltipClass="tooltipClass"
    matTooltipPosition="below"
    (click)="addPassenger()"
    >
      <mat-icon>add</mat-icon>
    </button>
  </div>
</form>

功能效果参考图:
输入字段示例,下方的添加按钮可支持用户新增乘客信息填写项

提交表单时直接读取this.passengerForm.value.passengers即可获取所有乘客的结构化数组数据,无需额外做字段收集处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:15:04