避免Angular2在按钮点击时系统地提交表单

kfa*_*kfa 94 javascript forms submit angular

好的,也许这还不清楚.获取此表单:

<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>
Run Code Online (Sandbox Code Playgroud)

为什么所有按钮都会触发submit()功能?以及如何避免这种情况?

yur*_*zui 182

我看到两个解决方案:

1)明确指定type ="button"(我认为更优选):

<button type="button" (click)="preview();">Preview</button>
Run Code Online (Sandbox Code Playgroud)

根据W3规范:

2)使用$event.preventDefault():

<button (click)="preview(); $event.preventDefault()">Preview</button>
Run Code Online (Sandbox Code Playgroud)

要么

<button (click)="preview($event);">Preview</button>

preview(e){
  e.preventDefault();
  console.log('preview')
}
Run Code Online (Sandbox Code Playgroud)

  • `(click)=“ preview(); false”`应该做同样的事情。例如,将需要显式调用stopPropagation(),但是如果事件处理程序返回false,则将在事件上调用preventDefault。 (2认同)
  • 使用#2似乎是最好的答案.只需添加:type ="button"到我的按钮解决了问题 (2认同)
  • 我不知道 W3C 规范中的 `type=button`。谢谢!! (2认同)

Ank*_*ngh 15

这个Plunker建议不然,每个按钮似乎按预期工作.

但是,为了防止表单的默认行为,您可以执行此操作,


TS:

submit(e){
 e.preventDefault();
}
Run Code Online (Sandbox Code Playgroud)

模板:

<form (submit)="submit($event)" #crisisForm="ngForm">
Run Code Online (Sandbox Code Playgroud)


小智 8

您必须从 app.module.ts 中的“@angular/forms”导入 FormsModule

import { FormsModule } from '@angular/forms';
 @NgModule({
  imports: [
    FormsModule
 ],
 })
Run Code Online (Sandbox Code Playgroud)


ima*_*era 7

我发现在2.0版本中将事件值(ngSubmit)传递null给方法,所以相反你应该我们(submit)

<form (submit)="submit($event)" #crisisForm="ngForm">
Run Code Online (Sandbox Code Playgroud)

你的.ts文件

submit($event){
   /* form code */
   $event.preventDefault();
}
Run Code Online (Sandbox Code Playgroud)


Aru*_*osh 5

我有同样的问题。我周围的工作中发现被替换buttona和应用按钮样式锚元素:

<form (ngSubmit)="submit()" #crisisForm="ngForm">
   <input type="text" name="name" [(ngModel)]="crisis.name">
   <button type="submit">Submit</button>
   <a class="btn" (click)="preview()">Preview</a>
   <a class="btn" (click)="reset()">Reset</a>
</form>
Run Code Online (Sandbox Code Playgroud)


Ale*_*rra 5

在不想执行提交的按钮中设置type =“ button”