2016-08-29 4 views
37

私は、フォームを作成するためにAngular2テンプレートを使用しています。ngSubmitは、角2の形式でページを更新します。

ボタンをクリックすると、ページが更新されます。

私の検証はうまくいきます。

ユーザーがボタンをクリックしたときにページを更新する方法を教えてください。代わりに

<div class="panel panel-default"> 
    <div class="panel-heading"> 
     <h3 class="panel-title">Add Employee</h3> 
     {{model | json}} 
     {{EName.errors | json}} 
    </div> 
    <div class="panel-body"> 
     <form (ngSubmit)="onSubmit(empForm)" #empForm="ngForm" autocomplete="off" novalidate> 

     <div class="form-group"> 
      <label for="EmployeeName">Employee Name</label> 
      <input type="text" class="form-control" id="EmployeeName" placeholder="Employee Name" required [(ngModel)]="model.EName" name="EName" #EName="ngModel" ngControl="Ename" #EName="EName" > 
      <div *ngIf="EName.touched && EName.errors" > 
       <div *ngIf="EName.errors.required" class="alert alert-danger"> 
        Employee Name is required 
       </div> 
      </div> 
     </div> 
     <div class="form-group"> 
      <label for="Age">Age</label> 
      <input type="text" class="form-control" id="Age" name="Age" placeholder="Age" [(ngModel)]="model.Age" ngControl="Age"> 
     </div> 
     <div class="form-group">    
      <label for="Sex">Sex</label> 
      <div class="d-block"> 
       <label class="radio-inline"> 
        <input type="radio" name="sex" id="Male" value="0" (click)="model.Sex=$event.target.value"> Male 
       </label> 
       <label class="radio-inline"> 
        <input type="radio" name="sex" id="Female" value="1" (click)="model.Sex=$event.target.value"> Female 
       </label> 
      </div> 
     </div> 

     <div class="form-group"> 
      <label for="DOJ">Date of Joining</label> 
      <datepicker [(ngModel)]="model.DOJ" name="DOJ"></datepicker> 
     </div> 

     <div class="form-group"> 
      <label for="Salary">Salary</label> 
      <input type="text" class="form-control" id="Salary" placeholder="Salary" [(ngModel)]="model.Salary" name="Salary"> 
     </div> 

     <div class="form-group"> 
      <label for="Designation">Designation</label> 
      <select id="Designation" name="designation" class="form-control" required [(ngModel)]="model.Designation" name="designation" #desig="ngForm" ngControl="Designation"> 
       <option value="" selected>-- Select --</option> 
       <option *ngFor="let designation of designations" value="{{ designation.id }}"> 
        {{designation.name}} 
       </option> 
      </select> 
      <div [hidden]="desig.valid || desig.pristine" class="alert alert-danger"> 
       Please select a proper designation. 
      </div> 
     </div> 
     <button type="submit" class="btn btn-default" [disabled] ="!empForm.form.valid">Submit</button> 
     </form> 
    </div> 
</div> 

答えて

9

用途:

<button type="button" 

リロードが既定のブラウザの動作を提出によって引き起こされる - :以下の

は、私が使用していますHTMLです。

+0

あなたは正しいです。私はボタンタイプをボタンに変えることができますが、ボタンタイプの送信ではどうすればいいですか?実際に私はangular2を学んでいます。 :) – Kunal

+0

@Saroj onclick = "return false;" –

+0

@asdf_enel_hak '(クリック)=" false "'は同じことをしますが、Angulars 'ngSubmit'が呼び出されたかどうかわかりません。私はこれが '(click)=" form.submit(); false "'を必要とするか、 'type =" button "以外の何かが簡単になると思います。 –

52

onSubmitハンドラにエラーがあるので、それは... onSubmitで 使用event.PreventDefault();リフレッシュします:また、あなただけマークしていることを確認してください...エラー をデバッグするコンソール出力を確認することができます

<form (ngSubmit)="onSubmit(empForm, $event)" ... > 


public onSubmit(empForm: any, event: Event) { 
    event.preventDefault(); 
    .... rest of your code 
} 

preserve logオプション

preserve log checked in devtools

+1

あなたは私の一日を保存しました。私は今多くのことを学んだ:) あなたはエラーを見つける方法を説明する方法!ありがとう! –

+0

このバグはまれな状況で発生します。入力フィールドがデフォルトで空の場合は確かに* not *です。 – Blauhirn

+0

この解決策は、私が知る限り、AoTコンパイラと互換性がありません。私は考えることができるあらゆる方法を試しましたが、常に「提供されたパラメータはコールターゲットのシグネチャと一致しません」。 –

31

あなたがをインポートしていることを確認してくださいFormsModuあなたのフォームがなければ、ページをリフレッシュし続け、コンソールに何もロギングしないで静かに失敗するので、コンポーネントを含むモジュールにから@ angular/formsが含まれています。

import { NgModule }   from '@angular/core'; 
import { CommonModule }  from '@angular/common'; 

/*make sure you import it here*/ 
import { FormsModule }  from '@angular/forms'; 

@NgModule({ 
    /*and add it to the imports array here*/ 
    imports:  [ FormsModule, CommonModule], 
    declarations: [ YourFormComponent ], 
    exports:  [], 
    providers: [], 
}) 

export class FeatureModule{ } 
関連する問題