¡Ya intenté seguir el ejemplo de otras respuestas de aquí y no lo logré!
Creé un formulario reactivo (es decir, dinámico) y quiero deshabilitar algunos campos en cualquier momento. Mi código de formulario:
this.form = this._fb.group({
name: ['', Validators.required],
options: this._fb.array([])
});
const control = <FormArray>this.form.controls['options'];
control.push(this._fb.group({
value: ['']
}));
mi html:
<div class='row' formArrayName="options">
<div *ngFor="let opt of form.controls.options.controls; let i=index">
<div [formGroupName]="i">
<select formArrayName="value">
<option></option>
<option>{{ opt.controls.value }}</option>
</select>
</div>
</div>
</div>
Reduje el código para facilitar. Quiero deshabilitar el campo de tipo seleccionar. Intenté hacer lo siguiente:
form = new FormGroup({
first: new FormControl({value: '', disabled: true}, Validators.required),
});
¡no funciona! alguien tiene una sugerencia?
first
? `:)value
no es un formArray, es un formControlName. Si deseavalue
ser un formArray, tendrá que cambiarlo. Actualmente es un formControlName. Entonces, si desea que todo el campo de selección esté deshabilitado, simplemente cambie<select formArrayName="value">
a<select formControlName="value">
Respuestas:
o
fuente
if
declaraciones. Una vez enviado el formulario, el formulario completo se desactiva una vez más.Presta atención
Si está creando un formulario usando una variable para condición y tratando de cambiarlo más tarde, no funcionará, es decir, el formulario no cambiará .
Por ejemplo
y si cambias la variable
la forma no cambiará. Deberías usar
Por cierto.
Debe usar el método patchValue para cambiar el valor:
fuente
Es una mala práctica usar deshabilitar en un DOM con formas reactivas. Puede configurar esta opción en su
FormControl
, cuando inicie desdePropiedad
value
no es necesariaO puede obtener su control de formulario con
get('control_name')
y configurardisable
fuente
It looks like you’re using the disabled attribute with a reactive form directive. If you set disabled to true when you set up this control in your component class, the disabled attribute will actually be set in the DOM for you. We recommend using this approach to avoid ‘changed after checked’ errors
. Entonces, la forma recomendada de cambiar el estado de deshabilitar / habilitar directamente a través de los controles. Además, puede consultar este gran tema netbasal.com/…Lo resolví envolviendo mi objeto de entrada con su etiqueta en un conjunto de campos: el conjunto de campos debe tener la propiedad deshabilitada vinculada al booleano
fuente
El
disabling
FormControlprevents
debe estar presente en un formulario mientrassaving
. Simplemente puede configurar lareadonly
propiedad.Y puedes lograrlo de esta manera:
HTML:
TS:
Encontré esto aquí
fuente
form.getRawValue()
para incluir los valores de controles deshabilitadosSi para usar
disabled
elementos de entrada de formulario (como se sugiere en la respuesta correcta cómo deshabilitar la entrada ), la validación para ellos también se deshabilitará, ¡preste atención a eso!(Y si está utilizando el botón enviar
[disabled]="!form.valid"
, excluirá su campo de la validación)fuente
Un enfoque más general sería.
fuente
Si desea deshabilitar
first
(control de formulario), puede usar la siguiente declaración.this.form.first.disable();
fuente
Esto funcionó para mí:
this.form.get('first').disable({onlySelf: true});
fuente
O formcontrol 'primero'
Puede configurar deshabilitar o habilitar en la configuración inicial.
fuente
fuente
La mejor solución está aquí:
https://netbasal.com/disabling-form-controls-when-working-with-reactive-forms-in-angular-549dd7b42110
Esquema de la solución (en caso de enlace roto):
(1) Cree una directiva
(2) Úselo así
(3) Dado que las entradas deshabilitadas no se muestran en form.value al enviar, es posible que deba usar lo siguiente en su lugar (si es necesario):
fuente
this.form.get('FIELD_NAME').patchValue(DYNAMIC_VALUE)
, muestro el formControl. cuando pasó a la directiva, muestra No se puede leer la propiedad 'deshabilitar' de indefinidoTuve el mismo problema, pero llamar a this.form.controls ['nombre']. Disable () no lo solucionó porque estaba recargando mi vista (usando router.navigate ()).
En mi caso tuve que restablecer mi formulario antes de recargar:
this.form = undefined; this.router.navigate ([ruta]);
fuente
fuente
Puede declarar una función para habilitar / deshabilitar todo el control de formulario:
y úsalo así
fuente
Para hacer un campo deshabilitar y habilitar de forma reactiva angular 2+
1. Para deshabilitar
<input class="form-control" name="Firstname" formControlName="firstname" [attr.disabled]="true">
Para permitir
Habilitar formulario completo
this.formname.enable();
Habilitar un campo particular solo
this.formname.controls.firstname.enable();
Esto funciona bien. Comentario para consultas.
fuente