Я использую реактивную форму для вставки контактной информации. Некоторые поля являются обязательными, а другие необязательными. Проблема, с которой я сталкиваюсь, заключается в том, что если пользователь не заполняет необязательные поля сведений и нажимает кнопку отправки, я получаю следующую ошибку:
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>
Как я могу сделать его необязательным для отправки пользователем формы без ввода дополнительных сведений. В настоящее время, если пользователь не вводит необязательные сведения, форма выдает ошибку, и если пользователь вводит данные, то он успешно отправляется
У вас не должно быть ошибки, но вы все равно можете предотвратить любую подобную ошибку с помощью чего-то вроде
lastVerifiedDate: this
.parseDate((this.contactForm.value.contactLastVerifiedDate || '').toString()),
вы должны проверить, есть ли действительное значение, прежде чем вы 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()) : '',
}
}
Если это не сработает, предоставьте минимальный воспроизводимый пример, воспроизводящий проблему.