Хорошо, может быть, это неясно. Получите эту форму:
<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>
Почему все кнопки запускают submit()
функцию? И как этого избежать?
Ответы:
Я вижу два варианта решения:
1) Укажите type = "button" явно (я думаю, что это предпочтительнее ):
Согласно спецификации W3:
2) Используйте
$event.preventDefault()
:или
источник
(click)="preview(); false"
должен делать то же самое. Например,stopPropagation()
может потребоваться явный вызов, но если обработчик события возвращаетсяfalse
, онpreventDefault
вызывается для события.return false
и это не сработало :)return
вероятно, не допускается в выражениях привязки, но значение последнего выражения возвращается неявно.type=button
спецификации W3C. Спасибо!!Этот Plunker говорит об обратном, каждая кнопка работает, как задумано.
Однако, чтобы предотвратить поведение формы по умолчанию, вы можете сделать это,
TS:
Шаблон:
источник
Я обнаружил, что в версии 2.0 методу
(ngSubmit)
передаетсяnull
значение события, поэтому вместо этого вы должны(submit)
ваш файл .ts
источник
Установите type = "button" в кнопке, для которой вы не хотите выполнять отправку.
источник
У меня такая же проблема. Обходной я нашел необходимость замены
button
сa
и применить стиль кнопки для анкерного элемента:источник
Вам необходимо импортировать FormsModule из '@ angular / forms' в свой app.module.ts
источник