好的,也许这还不清楚。获取此表单:
<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()
功能?以及如何避免这种情况?
答案 0 :(得分:147)
我看到两个解决方案:
1)明确指定 type =“button”(我认为更可取):
<button type="button" (click)="preview();">Preview</button>
根据W3规范:
按钮元素带 指定无类型属性 表示与按钮相同的内容 元素,其type属性设置为“submit”。
2)使用$event.preventDefault()
:
<button (click)="preview(); $event.preventDefault()">Preview</button>
或
<button (click)="preview($event);">Preview</button>
preview(e){
e.preventDefault();
console.log('preview')
}
答案 1 :(得分:14)
This Plunker建议不然,每个按钮似乎都按预期工作。
但是,为防止表单的默认行为,您可以执行此操作,
<强> TS:强>
submit(e){
e.preventDefault();
}
<强>模板:强>
<form (submit)="submit($event)" #crisisForm="ngForm">
答案 2 :(得分:7)
我发现2.0版本(ngSubmit)
正在将null
事件值传递给方法,所以应该让我们(submit)
<form (submit)="submit($event)" #crisisForm="ngForm">
您的.ts文件
submit($event){
/* form code */
$event.preventDefault();
}
答案 3 :(得分:5)
在您不想执行提交的按钮中设置 type =&#34;按钮&#34; 。
答案 4 :(得分:4)
我有同样的问题。我找到的工作是用button
替换a
并将按钮样式应用于锚元素:
<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>
答案 5 :(得分:2)
您必须在app.module.ts中从'@ angular / forms'导入FormsModule
X509Certificate cert = GetFirstNamedrootLocalMachineCertficate(certName);
Task t = ssl.AuthenticateAsServerAsync(cert).ContinueWith(taskResult =>
{
....
}
答案 6 :(得分:0)
Angular 为此提供了一个内置的解决方案。您只需将 (submit)="handleSubmit()"
替换为 (ngSubmit)="handleSubmit()"
。通过这样做,e.preventDefault()
将在幕后由 angular 本身隐式调用。