Как пометить ngbDatepicker Действительным в форме, даже если значение не выбрано
Я использую ng-bootstrap ngbDatepicker в Реактивной форме в проекте Angular2, и даты являются необязательными, однако ngbDatepicker всегда помечает форму как Неверная, если не выбрана дата.
Есть ли способ исключить ngbDatepicker из проверки формы или настроить его так, чтобы он возвращал Valid независимо от того, установлено ли у него значение или нет?
2 ответа
Проблема была в том, как я инициализировал значения формы. Я устанавливал значения по умолчанию для пустых строк, где я должен был инициализировать даты нулем. Итак, я делал это:
replicantForm = this.fb.group({
name: ['', Validators.required],
incepdate: '',
longevity: ''
})
Когда я должен был сделать это:
replicantForm = this.fb.group({
name: ['', Validators.required],
incepdate: null,
longevity: ''
})
Большое спасибо @pkozlowski-opensource за разъяснения.
В ответ на принятый ответ и тот факт, что он не будет работать для последующих обновлений, я использовал следующий хак, чтобы удостовериться, что элемент управления будет действительным, если дата не указана или недействительна.
Довольно неприятно менять значение в валидаторе, если вы спросите меня, но выполняйте работу до тех пор, пока ngb-datepicker не установит значение внутренне.
Пользовательский валидатор на нужный элемент управления:
validateOptionalDate(control: AbstractControl) {
if (!(control.value instanceof Object) && control.value !== null) {
control.patchValue(null, {
onlySelf: true,
emitEvent: false,
emitModelToViewChange: true,
emitViewToModelChange: false
});
}
}