Me he dado cuenta de que si desactivo un control en una forma reactiva de Angular 2, el control no se incluye en form.value. Por ejemplo, si defino mi formulario como se muestra a continuación:
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)
});
y verifique this.notelinkingForm.value, si todos los controles están habilitados, la salida sería:
{"Enabled":true, "LinkToPreceeding": true, LinkingTolerance:"100"}
Sin embargo, cuando algunos de los controles están deshabilitados sería:
{"Enabled":true}
Observe cómo se excluyen los controles deshabilitados.
Mi intención es que cuando cambie el formulario, quiero poder pasar el form.value con todas las propiedades a mi API de descanso. Obviamente, esto no será posible si no contiene los elementos deshabilitados.
¿Me falta algo aquí o es este el comportamiento esperado? ¿Hay alguna manera de decirle a Angular que incluya los elementos deshabilitados en form.value?
Dé la bienvenida a sus pensamientos.
fuente
readonly
ydisabled
. Pero este no es el caso de, por ejemplo, casillas de verificación y botones de opción, como describí en la respuesta a continuación. En esos casos, no me gustó tener que obtener los datos de manera diferente y codificar algo específicamente para ese caso.Otra opción que utilizo es:
this.form.controls['LinkToPreceeding'].value;
fuente
Gracias @Sasxa por conseguirme el 80% de lo que necesitaba.
Para aquellos de ustedes que buscan una solución al mismo problema pero para formularios anidados, pude resolver cambiando mi habitual
a
fuente
Si usa en
readonly
lugar dedisabled
, aún no se puede editar, mientras que los datos se incluirán en el formulario. Pero eso no es posible en todos los casos. Por ejemplo, no está disponible para botones de opción y casillas de verificación. Consulte los documentos web de MDN . En esos casos, debe solicitar las otras soluciones proporcionadas aquí.fuente