Необходимо указать значение для formcontrol - PullRequest
0 голосов
/ 05 июня 2019

у меня <mat-select required formControlName="registrationType">

Если я выберу незарегистрированное, два поля ввода будут отключены, иначе оно будет включено. Для этого я использовал

const registrationType = this.practiceForm.get('registrationType')
    registrationType.valueChanges.subscribe((value) => {
      if(value === 'Unregistered'){
            this.form.controls['registrationDate'].disable()
            this.form.controls['registrationNumber'].disable()
          }else if(value === 'registered') {
            this.form.controls['registrationDate'].enable()
            this.form.controls['registrationDate'].enable()
          }
    })

Два поля ввода отключаются, как и ожидалось, когда я выбрал незарегистрированный, но после нажатия кнопки Сохранить, следующая ошибка: Must supply a value for form control with name: 'registrationDate'

ФормаГруппа

registrationType: new FormControl(null, Validators.required),
registrationDate: new FormControl(null, Validators.required),
registrationNumber: new FormControl(null, Validators.required),

Мне нужна помощь в исправлении этого. Спасибо

Ответы [ 2 ]

1 голос
/ 05 июня 2019

Вы можете просто отключить валидаторы в коде, который вам нравится:

this.form.controls[""].validator = null;

Или вы можете использовать в форме для ввода атрибут disabled:

<input [disabled]="some_calculated_property">

Должен распознаватьсяangular, который отключен, потому что если вы манипулируете через корыто код, например, подписываетесь на ввод, не будет стандартных событий, которые будут запущены.

1 голос
/ 05 июня 2019

Для проверки требуется, чтобы в вашей дате было значение required.

Если вы отключите поля, form.value не содержит отключенных полей.

Это означает, что ваша форма считается недействительной.

Чтобы избежать этого, удалите валидаторы вместе со значением:

 if(value === 'Unregistered'){
   this.form.controls['registrationDate'].disable()
   this.form.controls['registrationNumber'].disable()
   this.form.controls['registrationDate'].setValidators([])
   this.form.controls['registrationNumber'].setValidators([])
 } else if(value === 'registered') {
   this.form.controls['registrationDate'].enable()
   this.form.controls['registrationDate'].enable()
   this.form.controls['registrationDate'].setValidators([Validators.required])
   this.form.controls['registrationNumber'].setValidators([Validators.required])
 }
...