J'essaye donc quelques Angular 2 et j'aime ça jusqu'à présent. Mais j'ai besoin d'aide pour naviguer dans ce nouveau paysage.
J'ai un formulaire pour modifier les détails d'un utilisateur et une liste sur le côté avec tous mes utilisateurs. Lorsque je clique sur l'un des utilisateurs de la liste, je souhaite remplir mon formulaire de modification d'utilisateur avec les détails de l'utilisateur (setEditForm (utilisateur)).
Je l'ai fait fonctionner et tout. Mais je dois dire que ce n'est pas tout à fait correct d'utiliser simultanément ngControl et ngModel. Mais c'est peut-être ...
Est-ce la bonne façon de procéder ou est-ce que j'ai juste de la chance de le faire fonctionner?
@Component({
template: `
<form (ngSubmit)="editUser(f.value)" #f="ngForm">
<input ngControl="nameInp" [ngModel]="selectedUser.name" type="text">
<input ngControl="ageInp" [ngModel]="selectedUser.age" type="text">
<input ngControl="cityInp" [ngModel]="selectedUser.city" type="text">
<button type="submit">Save</button>
</form>
)}
export class AdminComponent {
selectedUser:UserModel;
constructor() {
this.selectedUser = new UserModel;
}
setEditForm(user:UserModel) {
this.selectedUser = user;
}
editUser(form:any) {
// Update DB with values
console.log(form['nameInp']);
console.log(form['ageInp']);
console.log(form['cityInp']);
}
}
Bien sûr, vous pouvez utiliser ngControl
/ngFormControl
et ngModel
en même temps. De la documentation Angular2 ( https://angular.io/docs/ts/latest/guide/forms.html ):
liaison de données bidirectionnelle avec la syntaxe [(ngModel)] pour lire et écrire des valeurs dans les contrôles d'entrée
à l'aide de ngControl pour suivre l'état de modification et la validité des contrôles de formulaire
affichage des erreurs de validation aux utilisateurs et activation/désactivation des contrôles de formulaire
partage d'informations entre les contrôles avec des variables locales de modèle
En bref, j'utiliserais ngModel
si j'ai besoin d'une liaison bidirectionnelle et ngForm
/ngFormControl
si j'ai besoin d'une validation mais vous pouvez mélanger les deux.
Si vous n'avez besoin d'obtenir des valeurs et des notifications que lorsque les valeurs d'entrée sont mises à jour, ngControl
/ngFormControl` est suffisant ...
Les deux permettent de détecter les changements:
Vous pouvez configurer la liaison bidirectionnelle pour ngModel
pour vos éléments de formulaire:
<form (ngSubmit)="editUser(f.value)" #f="ngForm">
<input ngControl="nameInp" [(ngModel)]="selectedUser.name" type="text">
<input ngControl="ageInp" [(ngModel)]="selectedUser.age" type="text">
<input ngControl="cityInp" [(ngModel)]="selectedUser.city" type="text">
<button type="submit">Save</button>
</form>