abonnez-vous à valueChanges de l'entrée FormControl dans FormGroup
Angulaire 4, je suis en train de vous abonner à la valueChanges d'un FormControl. Aucune des versions ci-dessous est de travail. Je ne vois pas toutes les erreurs. Le formulaire.la valeur JSON est mise à jour comme je le type, mais l'abonnement n'est pas de travail.
myForm: FormGroup;
public firstName = new FormControl();
public lastName = new FormControl();
this.myForm = this.formBuilder.group({
firstName: '',
lastName: '',
});
this.myForm.controls.firstName.valueChanges.subscribe(value => {
console.log(value);
});
this.myForm.get('firstName').valueChanges.subscribe(value => {
console.log('name has changed:', value)
});
Voici un modèle extrait.
<form #myForm="ngForm">
<md-input-container>
<input mdInput name="firstName" [(ngModel)]="firstName" placeholder="enter name"/>
</md-input-container>
{{ myForm.valeur | json }}
Vous devez vous connecter pour publier un commentaire.
Je pense qu'il vous manque quelque chose ici avec
formGroup
etformControlName
que vous devez faire:sur
ngOnInit
et Dans
HTML
Il vous manque quelques choses essentielles dans votre code. Tout d'abord, ce que vous essayez de vous abonner, n'existe pas. Vous n'avez pas marqué ce champ doit être formcontrol, donc Angulaire ne sait pas à vous y inscrire. Vous devez marquer
formControlName="firstname"
laisser Angulaire sais que c'est une forme de contrôle.Aussi, vous êtes absence de marquage de votre forme comme une forme de groupe, il convient de:
À l'aide de
ngModel
dans les formulaires est découragé, lengModel
directive n'est même pas inclus dansReactiveFormsModule
. J'ai aussi remarqué qu'il provoque souvent des problèmes lorsqu'ils sont utilisés conjointement avec des formes réactives. Vous avez la forme des contrôles afin de remplacer l'utilisation dengModel
, afin de le déposer et utiliser les contrôles de formulaire, car ils sont déjà en place! 🙂Alors je serais à la place de l'aide
valueChanges
, utilisez simplement un événement de changement de place dans le modèle, mais c'est à vous.Ainsi, l'accumulation de la forme devrait ressembler à ceci:
Le modèle ressemblerait alors à ceci:
Donc, comme mentionné utiliser les contrôles de formulaire. Si vous avez besoin d'une valeur initiale, dans la construction de la forme. Vous avez toutes les valeurs dans votre objet de formulaire et vous pouvez y accéder si vous le souhaitez.
J'ai renoncé à FormGroup et FormBuilder et juste utilisé
HTML:
La classe App:
ngOnInit:
Mon test est actuellement en rupture avec le message d'erreur "Pas de fournisseur pour NgControl" mais je vais travailler sur la prochaine.
Mise à jour: j'ai juste besoin d'importer des ReactiveFormsModule au Banc d'essai