¡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 un momento dado. 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 selección de tipo. Intenté hacer lo siguiente:
form = new FormGroup({ first: new FormControl({value: '', disabled: true}, Validators.required), });¡no funciona! alguien tiene una sugerencia?
name: [{value: '', disabled: true}, Validators.required], name: [{value: '', disabled: this.isDisabled}, Validators.required],o
this.form.controls['name'].disable();Presta atención
Si está creando un formulario utilizando una variable para la condición e intenta cambiarlo más tarde, no funcionará, es decir, el formulario no cambiará .
Por ejemplo
this.isDisabled = true; this.cardForm = this.fb.group({ number: {value: null, disabled: this.isDisabled}, });y si cambias la variable
this.isDisabled = false;la forma no cambiará. Deberías usar
this.cardForm.get('número').disable();
POR CIERTO.
Debe usar el método patchValue para cambiar el valor:
this.cardForm.patchValue({ number: '1703' });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
<fieldset [disabled]="isAnonymous"> <label class="control-label" for="firstName">FirstName</label> <input class="form-control" id="firstName" type="text" formControlName="firstName" /> </fieldset>