Подтвердить что ты не робот

Angular 2 отключенных элемента управления не включаются в form.value

Я заметил, что если я отключу элемент управления в реактивной форме Angular 2, тогда элемент управления не будет включен в form.value. Например, если я определяю свою форму, как показано ниже:

this.notelinkingForm = new FormGroup({
    Enabled: new FormControl(settings.Enabled, Validators.required),
    LinkToPreceeding: new FormControl({value: settings.LinkToPreceeding, disabled: !settings.Enabled}, Validators.required),
    LinkingTolerance: new FormControl({value: settings.LinkingTolerance, disabled: !settings.Enabled}, Validators.required)
});

и проверьте значение this.notelinkingForm.value, если все элементы управления включены, то вывод будет следующим:

{"Enabled":true, "LinkToPreceeding": true, LinkingTolerance:"100"} 

Однако, когда некоторые из элементов управления отключены, это будет:

{"Enabled":true} 

Обратите внимание, что отключенные элементы управления исключены.

Мое намерение заключается в том, что при изменении формы я хочу иметь возможность передать form.value со всеми его свойствами в мой API-интерфейс для отдыха. Это будет невозможно, если оно не содержит отключенных элементов.

Мне что-то не хватает или это ожидаемое поведение? Есть ли способ сообщить Angular включить отключенные элементы в form.value?

Приветствуем ваши мысли.

4b9b3361

Ответ 1

Вы можете использовать:

this.notelinkingForm.getRawValue()

От docs:

Если вы хотите включить все значения независимо от статуса отказа, используйте этот метод. В противном случае свойство value - лучший способ получить значение группы.

Ответ 2

Другой вариант, который я использую:

this.form.controls['LinkToPreceeding'].value;

Ответ 3

Спасибо @Sasxa за то, что я получил 80% того, что мне было нужно.

Для тех из вас, кто ищет решение той же проблемы, но для вложенных форм, я смог решить, изменив свой обычный

this.notelinkingForm.get('nestedForm').value

в

this.notelinkingForm.getRawValue().nestedForm