Angular Material DatePicker с проверкой ввода

Я использую Angular с Angular Material (7.0.2) Сначала я просто использовал базовый ввод Angular Material с шаблоном проверки. Поле ввода предназначено для даты типа (ГГГГ-ММ-ДД). Проверка работала нормально, ввод даты вручную. После этого я добавил на вход Datepicker. Таким образом, вы можете ввести дату вручную или с помощью datepicker. Но после этого проверка всегда считает неправильным, происходит ли ввод вручную или через datepicker, поле ввода по-прежнему выделяется красным цветом.

Это поле ввода

     <mat-form-field class = "input-date">
        <input id = "search-form-field-input-date-from" matInput #date
               [formControl] = "dateFormControlFrom" required placeholder = "Date (YYYY-MM-DD)"
               [matDatepicker] = "datePickerFrom"
               pattern = "^(?:\d{4}-(?:(?:(?:(?:0[13578]|1[02])-(?:0[1-9]|[1-2][0-9]|3[01]))|(?:(?:0[469]|11)-(?:0[1-9]|[1-2][0-9]|30))|(?:02-(?:0[1-9]|1[0-9]|2[0-8]))))|(?:(?:\d{2}(?:0[48]|[2468][048]|[13579][26]))|(?:(?:[02468][048])|[13579][26])00)-02-29)$"
        >
        <mat-datepicker-toggle matSuffix [for] = "datePickerFrom"></mat-datepicker-toggle>
        <mat-datepicker #datePickerFrom></mat-datepicker>
      </mat-form-field>

функция проверки:

private validateFormInput(): boolean {
    return this.dateFormControlFrom.valid;
}

что я также заметил, когда делаю:

console.info(this.dateFormControlFrom.value)

Я получаю дату как Fri Nov 16 2018 00:00:00 GMT+0100, а не как 2018-11-16, как она выглядит на входе.

Это происходит потому, что matDatepicker связывает объект Date, а не простую строку типа «AAA-MM-DD».

Zooly 16.11.2018 09:16

Хорошо, если я выберу его из окна выбора даты, но также, если я введу дату вручную? Разве это не была бы простая строка?

WeSt 16.11.2018 09:21

Разве вы не можете просто сделать это в своей функции проверки: return typeof this.dateFormControlFrom.value.getMonth === 'function'. Это должно проверить, является ли введенная дата датой.

Zooly 16.11.2018 10:17

Вы можете предоставить stackblitz.

Farhat Zaman 16.11.2018 10:50
Тестирование функциональных 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
1
4
2 335
0

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