Estoy tratando de usar el disabled
atributo de a formControl
. Cuando lo pongo en la plantilla, funciona:
<md-input formControlName="id" placeholder="ID" [disabled]="true"></md-input>
Pero el navegador me alerta:
Parece que está utilizando el atributo disabled con una directiva de formulario reactivo. Si establece disabled en true cuando configura este control en su clase de componente, el atributo disabled se establecerá en el DOM para usted. Recomendamos utilizar este enfoque para evitar errores de "cambio después de comprobar".
Example: form = new FormGroup({ first: new FormControl({value: 'Nancy', disabled: true}, Validators.required), last: new FormControl('Drew', Validators.required) });
Así que lo puse en FormControl
, y lo borré de la plantilla:
constructor(private itemsService: ItemsService) {
this._items = [];
this.myForm = new FormGroup({
id: new FormControl({value: '', disabled: true}, Validators.required),
title: new FormControl(),
description: new FormControl()
});
this.id = this.myForm.controls['id'];
this.title = this.myForm.controls['title'];
this.description = this.myForm.controls['description'];
this.id.patchValue(this._items.length);
}
Pero no funciona (no está deshabilitando input
). ¿Cuál es el problema?
angular
typescript
FacundoGFlores
fuente
fuente
this.myForm.controls['id'].disable()
en algún lugar del constructor. Hice una biblioteca que facilita el trabajo con formularios dinámicos: github.com/mat3e/dorfRespuestas:
Lo he estado usando
[attr.disabled]
porque todavía me gusta esta plantilla impulsada que la habilitación () / deshabilitación () programática ya que es superior en mi opinión.Cambio
a
Si tiene un material más nuevo, cambie
md-input
amat-input
.fuente
[disabled]
y la advertencia en la consola está funcionando. Estoy usando Angular 4.1.3[attr.disabled]
simplemente no[disabled]
Puede habilitar / deshabilitar un control de formulario utilizando los siguientes métodos:
control.disable () o control.enable ()
Si eso no funcionó, puede usar una directiva
Entonces podrías usarlo así
Esta técnica se describe aquí:
https://netbasal.com/disabling-form-controls-when-working-with-reactive-forms-in-angular-549dd7b42110
Espero eso ayude
fuente
NgControl (`No provider for NgControl`)
Descubrí que necesitaba tener un valor predeterminado, incluso si era una cadena vacía para que funcionara. Así que esto:
... tenía que convertirse en esto:
Vea mi pregunta (que no creo que sea un duplicado): Pasar 'deshabilitado' en el objeto de estado de formulario al constructor FormControl no funciona
fuente
En mi caso con Angular 8 . Quería activar / desactivar la entrada según la condición.
[attr.disabled]
no funcionó para mí, así que aquí está mi solución.Eliminé
[attr.disabled]
de HTML y en la función del componente realicé esta verificación:fuente
Inicialización (componente) usando:
Entonces, en lugar de usar (plantilla):
Simplemente elimine el atributo deshabilitado:
Y cuando tenga elementos para mostrar, inicie (en el componente):
this.selector.enable();
fuente
Solo para quienes están usando formularios reactivos: para elementos HTML nativos [attr.disabled] funcionará, pero para elementos materiales necesitamos deshabilitar dinámicamente el elemento.
De lo contrario, se mostrará en el mensaje de advertencia de la consola.
fuente
Probé estos en angular 7. Funcionó con éxito.
fuente
Por un formulario, el control hace deshabilitar
O método de configuración inicial.
fuente
Use [attr.disabled] en lugar de [disabled], en mi caso funciona bien
fuente
agregar disable = "true" al campo html Ejemplo: desactivar
fuente
La belleza de las formas reactivas es que puede detectar cambios de valores de cualquier elemento de entrada muy fácilmente y al mismo tiempo puede cambiar sus valores / estado. Así que esta es otra forma de abordar su problema usando
enable
disable
.Aquí está la solución completa en stackblitz .
fuente
La desactivación de los campos de formulario de mat está exenta si está utilizando la validación de formulario, así que asegúrese de que su campo de formulario no tenga validaciones como (validators.required), esto funcionó para mí. por ejemplo:
editUserPhone: new FormControl ({valor: '', deshabilitado: verdadero})
esto hace que los números de teléfono del usuario no sean editables.
fuente
Esta fue mi solución:
fuente
en Angular-9 si desea deshabilitar / habilitar en el botón, haga clic aquí es una solución simple si está utilizando formas reactivas.
definir una función en el archivo component.ts
Llámelo desde su component.html
p.ej
fuente
Cuando cree un nuevo control de formulario, use el siguiente:
Si desea cambiar la actividad, use el siguiente:
o
fuente
agregue el atributo de nombre a su md-input. si no resuelve el problema, publique su plantilla
fuente
La mejor forma de hacer esto.
fuente