Как проверить дату в реактивных формах? (Angular)

Как я могу проверить дату, чтобы получить сообщение об ошибке, если дата предшествует сегодняшней дате. Я использовал Reactive Forms и хотел бы отображать ошибку на основе даты, введенной в поле ввода. Я прикрепил код ниже (компонент html и машинопись). Буду признателен за любую помощь.

import { Component, OnInit } from '@angular/core';
import { FormGroup, FormBuilder, Validators, FormControl } from '@angular/forms';

@Component({
  selector: 'app-cpi',
  templateUrl: './cpi.component.html',
  styleUrls: ['./cpi.component.scss']
})
export class MyComponent implements OnInit {

  public myForm: FormGroup;
  private today: Date = new Date();

  get date_cancelled() { return this.myForm.get('date_cancelled').value; }

  constructor(private fb: FormBuilder) {
    this.myForm = this.fb.group({
      emp_cancelled: [''],
      reg_employed: [''],
      date_cancelled: ['', this.dateValidator],
    });
  }

  dateValidator() {
      let from = new Date();
      let to = this.date_cancelled;
      if (from > to) {
        return false;
      }
    return true;

  }

  ngOnInit() {
    
}

}
<section class = "form">
  <form [formGroup] = "myForm">
        <mat-radio-group formControlName = "emp_cancelled">
          <mat-radio-button value = "emp_cancelled">Cancelled</mat-radio-button>
        </mat-radio-group>
        <mat-radio-group formControlName = "reg_employed">
          <mat-radio-button value = "reg_employed">Regularly employed</mat-radio-button>
        </mat-radio-group>
      </div>
      <br />
      <mat-form-field class = "date_cancelled" *ngIf = "myForm.controls.emp_cancelled?.touched">
        <input matInput [matDatepicker] = "picker" placeholder = "Taking effect at" formControlName = "date_cancelled">
        <mat-datepicker-toggle matSuffix [for] = "picker"></mat-datepicker-toggle>
        <mat-datepicker #picker></mat-datepicker>
      </mat-form-field>
      <mat-error *ngIf = "!myForm.controls.date_cancelled?.valid">Error date</mat-error>
      <button type = "submit">Submit</button>
  </form>
</section>
Тестирование функциональных 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
2
0
1 031
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете определить собственный валидатор, например

date_cancelled: ['', (c: AbstractControl) => (new Date(c.value).getTime() < Date.now() ? { invalid: true } : null)]

А также используйте mat-error без *ngIf, поскольку он автоматически показывает/скрывает сообщения об ошибках при возникновении ошибки проверки.

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