Percebi que se eu desabilitar um controle em uma forma reativa Angular 2, o controle não será incluído no form.value. Por exemplo, se eu definir meu formulário como a seguir:
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)
});
e verifique this.notelinkingForm.value, se todos os controles estiverem habilitados, a saída será:
{"Enabled":true, "LinkToPreceeding": true, LinkingTolerance:"100"}
No entanto, quando alguns dos controles estão desativados, será:
{"Enabled":true}
Observe como os controles desabilitados são excluídos.
Minha intenção é que, quando o formulário for alterado, eu quero poder passar o form.value com todas as propriedades dele para minha API restante. Isso obviamente não será possível se não contiver os itens desabilitados.
Estou faltando alguma coisa aqui ou esse é o comportamento esperado? Existe uma maneira de dizer ao Angular para incluir os itens desabilitados no form.value?
Dê as boas-vindas aos seus pensamentos.
fonte
readonly
edisabled
. Mas este não é o caso de, por exemplo, caixas de seleção e botões de opção, conforme descrevi na resposta abaixo. Nesses casos, não gostei de ter que obter os dados de maneira diferente e codificar algo especificamente para esse caso.Outra opção que utilizo é:
this.form.controls['LinkToPreceeding'].value;
fonte
Obrigado @Sasxa por me dar 80% do que eu precisava.
Para aqueles que procuram uma solução para o mesmo problema, mas para formas aninhadas, consegui resolver alterando o meu
para
fonte
Se você usar em
readonly
vez dedisabled
, ainda não será editável enquanto os dados serão incluídos no formulário. Mas isso não é possível em todos os casos. Por exemplo, não está disponível para botões de rádio e caixas de seleção. Consulte os documentos da web do MDN . Nesses casos, você deve se inscrever para as outras soluções fornecidas aqui.fonte