Ne peut pas désactiver matInput avec élément [formControlName]
Je suis en utilisant matInput
et mat-form-field
(@angulaire/matériel) dans Angulaire de la composante, et je ne peux pas désactiver le matInput
.
Il semble probable que je suis absent quelque chose d'évident, mais pour la vie de moi je ne peux pas comprendre ce que. Est-ce un bug?
Si je supprime [formControlName]
de la CustomFormInputComponent
, alors je peux réussir à désactiver le matInput
CustomFormInputComponent
:
import { Input, Component } from '@angular/core';
import { FormGroup } from '@angular/forms';
@Component({
selector: 'app-custom-form-input',
template: `
<mat-form-field [formGroup]="form">
<input matInput placeholder='Name' [formControlName]="formControlName" [disabled]='disabled'>
</mat-form-field>
`,
})
export class CustomFormInputComponent {
@Input() form: FormGroup;
@Input() formControlName: string = 'name';
@Input() disabled = false;
}
AppComponent
:
import { Component } from '@angular/core';
import { FormBuilder } from '@angular/forms';
@Component({
selector: 'my-app',
template: `
<p>At least one of these inputs should be disabled, but none are :(</p>
<app-custom-form-input [form]="form" [disabled]='true'></app-custom-form-input>
<app-custom-form-input [form]="form" [disabled]="'disabled'"></app-custom-form-input>
`,
})
export class AppComponent {
public form: any;
constructor(private fb: FormBuilder) {}
ngOnInit() {
this.form = this.fb.group({
name: ''
})
}
}
De toutes les suggestions sont grandement appréciés!
Réponse
Pour un peu plus de contexte sur David réponse: Angulaire des mises à jour DOM l'état fondée sur le handicap d'un réactif de contrôle de formulaire. Ce que je pense qui se passe: angulaire est rendu le CustomFormInputComponent
avant la AppComponent
et est rendu le composant désactivé. Puis le AppComponent est rendue et la form
est construit avec la name
control est activé. Angulaire va alors et onu-désactivé DOM l'élément d'entrée (ce qui est le comportement comme prévu).
Vous devez vous connecter pour publier un commentaire.
Si vous utilisez un FormGroup, alors vous ne devez pas désactiver la forme dans le Modèle HTML. Il ne fonctionnera pas si vous essayez de le désactiver dans le HTML avec FormControl. Au lieu de cela, il devrait être fait au sein de la FormGroup. Essayez ceci:
et:
Aussi...pas une grosse affaire, mais..vous devriez vraiment faire:
au lieu de:
N'oubliez pas l'importation ainsi
Btw, le nom à l'intérieur du formulaire de déclaration de groupe doit correspondre à celui que vous avez défini dans le code HTML.
Donc:
et
input
éléments peuvent se lier au même contrôle de formulaire (je pense). Il n'est pas immédiatement évident pour moi pourquoi je ne pouvais pas désactiver une de ces entrées dans le code html, mais laissez le réactif de contrôle de formulaire activée, de sorte que les autres entrées de la liaison à il travaillait encore.this.printForm.controls['title'].enable();
outhis.printForm.controls['title'].disable()
-->sortie
essayez cette.
.fichier html
.fichier ts
importer ce :
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
J'ai eu le même problème et je l'ai résolu avec *ngIf directive. Si l'entrée doit être désactivée, il handicapées, retirer sa forme contraignante et donner sa valeur manuellement. Si ce n'est pas, que l'utilisation de votre formControl comme il est.
C'est votre modèle:
HTML:
changer avec:
HTML:
Si vous utilisez FormGroup vous devez utiliser désactivé promerty de la création de votre FormGroup/FormControl:
Mais si vous voulez désactivé activer/vous pouvez l'utiliser dans votre code HTML: