Ok, więc może to jest niejasne. Pobierz ten formularz:
<form (ngSubmit)="submit()" #crisisForm="ngForm">
<input type="text" name="name" [(ngModel)]="crisis.name">
<button type="submit">Submit</button>
<button type="button" (click)="preview()">Preview</button>
<button type="reset" (click)="reset()">Reset</button>
</form>
Dlaczego wszystkie przyciski wyzwalają tę submit()
funkcję? Jak tego uniknąć?
Odpowiedzi:
Widzę dwie możliwości rozwiązania tego problemu:
1) Podaj jawnie type = "button" (myślę, że jest to bardziej preferowane ):
Zgodnie ze specyfikacją W3:
2) zastosowanie
$event.preventDefault()
:lub
źródło
(click)="preview(); false"
powinien zrobić to samo. Na przykładstopPropagation()
musiałaby zostać wywołana jawnie, ale jeśli procedura obsługi zdarzeń zwrócifalse
,preventDefault
zostanie wywołana w zdarzeniu.return false
i nie zadziałało :)return
prawdopodobnie nie jest dozwolone w wyrażeniach wiążących, ale wartość ostatniego wyrażenia jest zwracana niejawnie.type=button
specyfikacji W3C. Dziękuję Ci!!Ten Plunker sugeruje inaczej, każdy przycisk wydaje się działać zgodnie z przeznaczeniem.
Aby jednak zapobiec domyślnemu zachowaniu formularza, możesz to zrobić,
TS:
Szablon:
źródło
Okazało się, że w wersji 2.0
(ngSubmit)
przekazujenull
wartość zdarzenia do metody, więc zamiast tego powinieneś nas(submit)
Twój plik .ts
źródło
Ustaw type = "button" w przycisku, którego nie chcesz przesyłać.
źródło
Mam ten sam problem. Prace wokół znalazłem próżniowej
button
za
i zastosować styl do elementu przycisku kotwicy:źródło
Musisz zaimportować FormsModule z „@ angular / forms” w swoim app.module.ts
źródło