>= RC.6
Support resetting forms and maintain a submitted
state.
console.log(this.form.submitted);
this.form.reset()
or
this.form = new FormGroup()...;
importante mise à jour
Pour définir les contrôles du formulaire dans un état lors de sa création, comme les validateurs, certaines mesures supplémentaires sont nécessaires
Dans la partie vue du formulaire (html) ajoutez un *ngIf
pour afficher ou masquer le formulaire
``
Du côté composant du formulaire (*.ts) faites ceci
showForm:boolean = true;
onSubmit(value:any):void {
this.showForm = false;
setTimeout(() => {
this.reset()
this.showForm = true;
});
}
Voici un exemple plus détaillé:
export class CreateParkingComponent implements OnInit {
createParkingForm: FormGroup ;
showForm = true ;
constructor(
private formBuilder: FormBuilder,
private parkingService: ParkingService,
private snackBar: MatSnackBar) {
this.prepareForm() ;
}
prepareForm() {
this.createParkingForm = this.formBuilder.group({
'name': ['', Validators.compose([Validators.required, Validators.minLength(5)])],
'company': ['', Validators.minLength(5)],
'city': ['', Validators.required],
'address': ['', Validators.compose([Validators.required, Validators.minLength(10)])],
'latitude': [''],
'longitude': [''],
'phone': ['', Validators.compose([Validators.required, Validators.minLength(7)])],
'pictureUrl': [''],
// process the 3 input values of the maxCapacity'
'pricingText': ['', Validators.compose([Validators.required, Validators.minLength(10)])],
'ceilingType': ['', Validators.required],
});
}
ngOnInit() {
}
resetForm(form: FormGroup) {
this.prepareForm();
}
createParkingSubmit() {
// Cacher le formulaire pendant la soumission
this.showForm = false ;
// Dans ce cas, appeler le backend et réagir à la réponse de succès ou d'échec
this.parkingService.create(p).subscribe(
response => {
console.log(response);
this.snackBar.open('Parqueadero creado', 'X', {duration: 3000});
setTimeout(() => {
//réinitialiser le formulaire et le montrer à nouveau
this.prepareForm();
this.showForm = true;
});
}
, error => {
console.log(error);
this.showForm = true ;
this.snackBar.open('ERREUR: lors de la création du Parqueadero:' + error.message);
}
);
}
}
Exemple Plunker
original <= RC.5 Déplacez simplement le code qui crée le formulaire dans une méthode et appelez-le à nouveau après avoir traité la soumission :
@Component({
selector: 'form-component',
template: `
submit
name: {{name.value}}
email: {{email.value}}
username: {{username.value}}
`
})
class FormComponent {
name:Control;
username:Control;
email:Control;
form:ControlGroup;
constructor(private builder:FormBuilder) {
this.createForm();
}
createForm() {
this.name = new Control('', Validators.required);
this.email = new Control('', Validators.required);
this.username = new Control('', Validators.required);
this.form = this.builder.group({
name: this.name,
email: this.email,
username: this.username
});
}
onSubmit(value:any):void {
// code that happens when form is submitted
// then reset the form
this.reset();
}
reset() {
this.createForm();
}
}
Exemple Plunker
``
0 votes
La question est un peu différente mais je pense que la réponse est la même.
0 votes
Günther, la question à laquelle vous faites référence ne montre pas comment supprimer et recréer un groupe de contrôles. C'est ce que je demande. Je pense qu'il serait utile que quelqu'un montre la meilleure façon de le faire.
0 votes
Vous pouvez utiliser
ngModel
au lieu dengControl
pour le formulaire dans angular2 peut-être parce que ngControl ne supporte pas encore correctement la réinitialisation du contrôle après la soumission du formulaire.