Угловой материал 2 мат

Я использую matHorizontalStepper из Angular Material 5.2.4 с Angular 4/5. Включен линейный режим. На шаге 1 у меня есть форма с двумя необходимыми входами. Но степпер проверяет, заполнен ли только один требуемый вход. Для степпера достаточно, чтобы пользователь заполнил только одно обязательное поле и позволил пользователю перейти к шагу 2.

Вот о чем я говорю https://angular-ugvs4m.stackblitz.io

Что я могу настроить для шагового двигателя, чтобы проверять, заполнены ли все необходимые поля?

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
0
1 687
1

Ответы 1

Я разветвил ваше приложение stackblitz и исправил вашу ошибку. Живой пример

Ваша ошибка заключалась в использовании одного и того же элемента управления для [stepControl], [formGroup] и для обоих входов с formControlName (firstName и lastName).

Вам нужно создать родительскую группу formGroup (firstFormGroup в вашем примере), а затем два FormControls внутри нее (firstName и lastName). Остальное просто подключает прямо в html.

Также обратите внимание, что я удалил required из всех элементов <input>. Если вы используете формы на основе шаблонов, вам не нужно добавлять элементы html.

файл фиксированного компонента

  ngOnInit() {
    this.firstFormGroup = this._formBuilder.group({
      firstName: ['', Validators.required],
      lastName: ['', Validators.required]
    });
    this.secondFormGroup = this._formBuilder.group({
      address: ['', Validators.required],
    });
  }

исправленный шаблон html

<mat-horizontal-stepper [linear] = "true" #stepper = "matHorizontalStepper">
  <mat-step [stepControl] = "firstFormGroup">
    <form [formGroup] = "firstFormGroup">
      <ng-template matStepLabel>Fill out your name</ng-template>
      <mat-form-field>
        <input matInput placeholder = "First name"  formControlName = "firstName">
      </mat-form-field>
      <mat-form-field>
        <input matInput placeholder = "Last name" formControlName = "lastName" >
      </mat-form-field>
      <div>
        <button mat-button matStepperNext>Next</button>
      </div>
    </form>
  </mat-step>
  <mat-step [stepControl] = "secondFormGroup">
    <form [formGroup] = "secondFormGroup">
      <ng-template matStepLabel>Fill out your address</ng-template>
      <mat-form-field>
        <input matInput placeholder = "Address" formControlName = "address" 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>
    You are now done.
    <div>
      <button mat-button matStepperPrevious>Back</button>
      <button mat-button (click) = "stepper.reset()">Reset</button>
    </div>
  </mat-step>
</mat-horizontal-stepper>

Другие вопросы по теме