Soru ngSubmit, sayfayı Angular 2 formunda yeniler


Bir form oluşturmak için Angular2 şablonunu kullanıyorum.

Düğmeyi tıkladığımda, sayfalar yenilenir.

Doğrulama çalışmalarım iyi.

Kullanıcı, düğmeyi tıkladığında sayfanın yenilenmesini nasıl durdurabilirim?

Aşağıdaki HTML kullanıyorum: -

<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>

44
2017-08-29 09:57


Menşei




Cevaplar:


içinde bir hata olduğu için yenilenir onSubmit işleyicisi .. kullanım event.PreventDefault(); içinde onSubmit :

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


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

ayrıca hata ayıklamak için konsol çıktısını da kontrol edebilirsiniz ... işaretlediğinizden emin olun. preserve log seçenek

preserve log checked in devtools


63
2017-10-15 05:53



günümü kurtardın. Şu anda çok şey öğrendim :) Hatayı nasıl bulacağınızı anlatmanın yolu! Teşekkürler!!! - john Smith
Bu böcek nadir durumlarda gerçekleşir, öyle görünüyor. Kesinlikle değil Giriş alanları varsayılan olarak boşsa. - Blauhirn
Bu çözüm, anlayabildiğim kadarıyla, AoT derleyicisiyle uyumlu değil. Düşünebildiğim her şeyi denedim ama her zaman Supplied parameters do not match any signature of call target.. - Dustin Cleveland
Uygulamış olsam bile event.preventDefault() onSubmit () işlevi sayfa yenileme / geri gönderme neden olur. herhangi bir fikrin neden? - MarmiK


İçe aktardığınızdan emin olun FormsModule itibaren @ Açısal / formlar Bileşeninizi içeren modülde, siz olmadan formdaki formunuz sayfayı yenilemeye ve bir şeyleri konsola kaydetmeden sessizce başarısız olmaya devam edecektir.

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{ }

40
2018-03-10 16:18





Yerine kullanın:

<button type="button"

Yeniden yükleme, tarayıcının varsayılan gönderme davranışından kaynaklanır.


12
2017-08-29 10:12



Haklısın. Düğme tipini butona dönüştürebilirim, ancak buton tipi gönderim ile bunu nasıl yapabiliriz. Aslında açısal öğreniyorum 2. :) - Kunal
@Saroj onclick = "false döndür"; - asdf_enel_hak
@asdf_enel_hak (click)="false" aynısını yapardı ama angular mı bilmiyorum ngSubmit o zaman denir. Bunun gerekeceğini tahmin ediyorum (click)="form.submit();false" ya da bir şey ama type="button" daha kolay. - Günter Zöchbauer
İnternette birçok örnek gördüm (github.com/DeborahK/ngconf2016/blob/master/MovieHunter/app/...). Yanlış kullanmak zorunda değiliz ya da özel bir şey yapmamız gerekiyor. - Kunal
Hiçbir şey değil. NgSubmit'i nasıl kullanacağımı öğrenmek ve ngSubmit ile kodumu neden tam sayfa yeniden yükleme öğrenmek istiyorum - Kunal