Форма выдает ошибку, если я не заполняю все данные в реактивных формах Angular

Я использую реактивную форму для вставки контактной информации. Некоторые поля являются обязательными, а другие необязательными. Проблема, с которой я сталкиваюсь, заключается в том, что если пользователь не заполняет необязательные поля сведений и нажимает кнопку отправки, я получаю следующую ошибку:

ERROR TypeError: "this.contactForm.value.contactLastVerifiedDate is null"

HTML-код:

 ngOnInit() {
    this.contactForm = this.formBuilder.group({
      contactType: ['', Validators.required],
      contactSubType: ['', Validators.required],
      referenceNumber: ['', Validators.required],
      contactStartDate: ['', Validators.required],
      contactLastVerifiedDate: ['']
    });
  }
  onSubmit() {
   if (this.contactForm.valid) {
      const newContact = {
        contactType: this.contactForm.value.contactType,
        contactSubType: this.contactForm.value.contactSubType,
        referenceNumber: this.contactForm.value.referenceNumber,
        startDate: this.parseDate(this.contactForm.value.contactStartDate.toString()),
        lastVerifiedDate: this.parseDate(this.contactForm.value.contactLastVerifiedDate.toString()),
    }
<form [formGroup] = "contactForm" (ngSubmit) = "onSubmit()">
  <div class = "form-group">
    <label>Contact Type</label>
    <mat-select
      formControlName = "contactType"
      class = "form-control"
      [ngClass] = "{ 'is-invalid': submitted && contactFormf.contactType.errors }"
      required
    >
      <mat-option *ngFor = "let obj of contactTypes" [value] = "obj.value"> {{ obj.viewValue }}</mat-option>
    </mat-select>
    <div *ngIf = "submitted && contactFormf.contactType.errors" class = "invalid-feedback">
      <div *ngIf = "submitted && contactFormf.contactType.errors.required">Contact Type is required</div>
    </div>
  </div>
 
  <div class = "form-group">
    <label>Contact Sub Type</label>
    <mat-select
      formControlName = "contactSubType"
      class = "form-control"
      [ngClass] = "{ 'is-invalid': submitted && contactFormf.contactType.errors }"
      required
    >
      <mat-option *ngFor = "let obj of contactSubTypes" [value] = "obj.value"> {{ obj.viewValue }}</mat-option>
    </mat-select>
    <div *ngIf = "submitted && contactFormf.contactSubType.errors" class = "invalid-feedback">
      <div *ngIf = "submitted && contactFormf.contactSubType.errors.required">Name Type is required</div>
    </div>
  </div>
  <div class = "form-group">
    <label>Reference Number</label>
    <input
      type = "text"
      formControlName = "referenceNumber"
      class = "form-control"
      [ngClass] = "{ 'is-invalid': submitted && contactFormf.referenceNumber.errors }"
      required
    />
    <div *ngIf = "submitted && contactFormf.referenceNumber.errors" class = "invalid-feedback">
      <div *ngIf = "submitted && contactFormf.referenceNumber.errors.required">Reference Number is required</div>
    </div>
  </div>

  <div class = "form-group">
    <input
      matInput
      [matDatepicker] = "startDate"
      formControlName = "contactStartDate"
      placeholder = "Choose Start date"
      [ngClass] = "{ 'is-invalid': submitted && contactFormf.contactStartDate.errors }"
      required
    />
    <mat-datepicker-toggle matSuffix [for] = "startDate"></mat-datepicker-toggle>
    <mat-datepicker #startDate></mat-datepicker>
    <div *ngIf = "submitted && contactFormf.contactStartDate.errors" class = "invalid-feedback">
      <div *ngIf = "submitted && contactFormf.contactStartDate.errors.required">Contact Start Date is required</div>
    </div>
  </div>

  <div class = "form-group">
    <input matInput [matDatepicker] = "lastVerifiedDate" formControlName = "contactLastVerifiedDate" placeholder = "Choose Last Verified date" />
    <mat-datepicker-toggle matSuffix [for] = "lastVerifiedDate"></mat-datepicker-toggle>
    <mat-datepicker #lastVerifiedDate></mat-datepicker>
  </div>



  <div class = "form-group">
    <button>Save</button>
  </div>
</form>

Как я могу сделать его необязательным для отправки пользователем формы без ввода дополнительных сведений. В настоящее время, если пользователь не вводит необязательные сведения, форма выдает ошибку, и если пользователь вводит данные, то он успешно отправляется

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
109
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

У вас не должно быть ошибки, но вы все равно можете предотвратить любую подобную ошибку с помощью чего-то вроде

lastVerifiedDate: this
  .parseDate((this.contactForm.value.contactLastVerifiedDate || '').toString()),

Если это не сработает, предоставьте минимальный воспроизводимый пример, воспроизводящий проблему.

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

вы должны проверить, есть ли действительное значение, прежде чем вы parseDate... ваша функция будет:

 onSubmit() {
   if (this.contactForm.valid) {
      const newContact = {
        contactType: this.contactForm.value.contactType,
        contactSubType: this.contactForm.value.contactSubType,
        referenceNumber: this.contactForm.value.referenceNumber,
        startDate: this.parseDate(this.contactForm.value.contactStartDate.toString()),
    lastVerifiedDate: (this.contactForm.value.contactLastVerifiedDate != '' && this.contactForm.value.contactLastVerifiedDate) ? this.parseDate(this.contactForm.value.contactLastVerifiedDate.toString()) : '',
    }
}

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