2017-07-19 1 views
6

J'utilise angular 2.4.0 et je souhaite effacer les champs de saisie après l'envoi du formulaire. Essayé SendRequest.reset().Réinitialiser le formulaire après l'envoi du formulaire dans le formulaire basé sur le modèle Angular2

component.ts

getRevision(SendRequest: NgForm){ 
    this.submitted = true; 
    let headers = new Headers({ 
     'Content-Type': 'application/x-www-form-urlencoded' 
    }); 
    let params = { 
     "Firstname":this.name, 
     "Lastname":"", 
     "Email":this.email, 
     "Phonecode":"91", 
     "Phone":this.phone, 
     "Message":this.message,  
     } 
    return this.http.post(this.url,params) 
    .map(res => res.json()) 
    .catch(this.errorHandler) 
    .subscribe(
      data => { 
       this.revisions = data.resultData; 
       this.resultCode = data.resultCode; 
       this.responeseMsg = data.message.MessageText;     
      }, 
      err => { 
       console.log(err); 
      }, 
      () =>{ 
      SendRequest.resetForm(); 
      SendRequest.form.reset(); 
      } 
     ) 

    } 

component.html

<form #SendRequest="ngForm" [formGroup]="SendRequest" > 
    <div class="col-md-6"> 
    <div class="form-group"> 
    <input type="text" name="name" [(ngModel)]="name" class="form-control" placeholder="Your Name" required #fullname="ngModel"> 
    <div *ngIf="fullname.errors && (fullname.dirty || fullname.touched)" 
    class="contact-validate"> 
    <div [hidden]="!fullname.errors.required"> 
     Name is required 
    </div>          
    </div> 
</div> 
<div class="form-group"> 
    <input type="email" name="email" class="form-control" [(ngModel)]="email" required #emailid="ngModel" placeholder="Your Email" pattern="^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$"> 
    <div *ngIf="emailid.errors && (emailid.dirty || emailid.touched)" 
    class="contact-validate"> 
    <div [hidden]="!emailid.errors.required"> 
    Email is required 
    </div> 
    <div [hidden]="!emailid.errors.pattern"> 
    Please enter valid email format 
    </div>          
</div> 
</div> 
<div class="form-group"> 
<input type="text" name="phone" class="form-control" [(ngModel)]="phone" placeholder="Your Phone" required pattern="[0-9]+" #phoneno="ngModel"> 
<div *ngIf="phoneno.errors && (phoneno.dirty || phoneno.touched)" 
class="contact-validate"> 
<div [hidden]="!phoneno.errors.required"> 
    Phone is required 
</div>  
<div [hidden]="!phoneno.errors.pattern"> 
    Phone must be number 
</div>               
</div> 
</div> 
</div> 
<div class="col-md-6"> 
    <div class="form-group"> 
    <textarea class="form-control" name="message" [(ngModel)]="message" #msg="ngModel" required placeholder="Your Message" rows="7"></textarea> 
    <div *ngIf="msg.errors && (msg.dirty || msg.touched)" 
    class="contact-validate"> 
    <div [hidden]="!msg.errors.required"> 
    Message is required 
    </div>          
</div> 
</div> 
</div> 
<div class="send-msg-btn"> 
    <button type="button" [disabled]="!SendRequest.form.valid" (click)="getRevision()" class="btn btn-primary"><i class="fa fa-send"></i>send message</button>  
</div> 
</form> 

J'appelle getRevision() sur le bouton, cliquez essayé
SendRequest.resetForm(); SendRequest.form.reset(); déjà, mais ne fonctionne pas S'il vous plaît me donner des suggestions, qu'est-ce qui ne va pas ici?

+0

envoyez la variable "SendRequest" avec l'appel de méthode dans l'événement click button, getRevision (SendRequest) –

+0

hey, faites-moi savoir si [ma solution] (https://stackoverflow.com/a/45183145/2545680) a fonctionné pour –

+0

@Maximus Thans pour la réponse, je le vérifie –

Répondre

1

Vous devez utiliser la méthode reset sur le FormGroup créé dans votre composant et référence avec this:

this.SendRequest.reset(); 
+0

@NikhilRadadiya, Pengyy a répondu aussi travailler comme ceci 'SendRequest.reset(); 'sans spécifier de valeurs de contrôle de formulaire? Je ne comprends pas comment cela pourrait fonctionner –

+0

oui, bro il a travaillé –

+0

@NikhilRadadiya, hmm, je ne comprends pas comment. Le 'NgForm' n'a même pas la méthode' reset' [comme indiqué dans les docs] (https://angular.io/api/forms/NgForm) –

5

vous passerez SendRequest (formulaire lui-même) à l'événement de clic de send message bouton

<button type="button" [disabled]="!SendRequest.form.valid" (click)="getRevision(SendRequest)" class="btn btn-primary"><i class="fa fa-send"></i>send message</button> 

puis appelez le form.reset() pour réinitialiser le formulaire piloté par le modèle.

getRevision(SendRequest: NgForm){ 
    ... 
    SendRequest.reset();  // <-------reset form here 
} 

simples demo.

+0

Merci beaucoup, cela a fonctionné –

+0

hey, pouvez-vous s'il vous plaît expliquer pourquoi votre solution fonctionne? le 'NgForm' ne semble pas avoir la méthode' reset' [comme indiqué dans les docs] (https://angular.io/api/forms/NgForm). De même, pourquoi les contrôles sont-ils réinitialisés si vous n'en spécifiez pas les valeurs? Merci –

+0

@Maximus c'est la caractéristique normale de HTML5 formElement, vous pouvez trouver sa documentation ici: https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement/reset – Pengyy