Angular 2 controles deshabilitados no se incluirán en el formulario.valor

He notado que si me deshabilitar un control en un Angular 2 de forma reactiva a continuación, el control no se incluirán en el formulario.valor. Por ejemplo, si defino mi formulario como el siguiente:

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 comprobar el este.notelinkingForm.valor, si todos los controles son habilitada, la salida sería:

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

Sin embargo, cuando algunos de los controles son discapacitados sería:

{"Enabled":true} 

Observe cómo la movilidad de los controles son excluidos.

Mi intención es que cuando la forma cambia, quiero ser capaz de pasar a la forma.valor con todas las propiedades en off para mi la API de rest. Esto no será posible, obviamente, si no contiene los elementos deshabilitados.

Que me estoy perdiendo algo aquí, o es este el comportamiento que se espera? Hay una manera de decirle Angular para incluir los elementos deshabilitados en el formulario.valor?

La bienvenida a tus pensamientos.

3 Kommentare

  1. 184

    Puede utilizar:

    this.notelinkingForm.getRawValue()
    

    De docs:

    Si quieres incluir todos los valores independientemente de movilidad de estado, el uso de este método. De lo contrario, el value propiedad es la mejor manera de obtener el valor del grupo.

    • Se preguntan por qué en la tierra, el Angular equipo hizo esto
    • Que lo hizo porque es posible habilitar un control deshabilitado y editar su valor. En este caso getRawValue() devolverá un objeto con el valor alterado.
  2. 4

    Gracias @Sasxa por hacer que me de un 80%, lo que yo necesitaba.

    Para aquellos de ustedes que buscan una solución para el mismo problema, pero para los formularios anidados, yo era capaz de resolver cambiando mi habitual

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

    a

    this.notelinkingForm.getRawValue().nestedForm
    

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea