在Angular中,如何添加按钮而不提交表单?
例如,我想在不提交表单的情况下打电话给onCancel
,但是更新按钮应该提交表单,并且仍然保留ngSubmit
。
<form [formGroup]="form" (ngSubmit)="submit()">
<p>
<select ...>...</select>
</p>
<p>
<button
type="submit"
mat-raised-button
color="primary">
update
</button>
<button mat-raised-button (click)="onCancel($event)">
cancel
</button>
</p>
</form>
答案 0 :(得分:5)
只需添加type='button'
。表单中没有任何定义的type
的按钮就像表单的submit
按钮一样。
答案 1 :(得分:2)
按钮共有三种类型:
(This is default.)
因此您只需要更新按钮
的类型属性模板
<button type="button" mat-raised-button (click)="onCancel($event)">
cancel
</button>
答案 2 :(得分:1)
您可以将$event.preventDefault()
添加到按钮点击事件中
<button mat-raised-button (click)="onCancel($event); $event.preventDefault()">
答案 3 :(得分:1)
您可以使用type="button"
,如果您未提及任何类型,则默认情况下该按钮被视为提交类型。因此,对于非提交按钮,您的代码应该看起来像这样。
<button type="button" mat-raised-button (click)="onCancel($event)">
cancel
</button>
答案 4 :(得分:0)
在表单标签中删除(ngSubmit)="submit()"
并将其放在按钮中,如下所示:
<button
(click)="submit()"
mat-raised-button
color="primary">
update
</button>
答案 5 :(得分:-1)
总的来说,我不喜欢默认按钮类型是提交的想法,我创建了以下指令来使事情正确,没有类型设置的按钮显式默认为按钮:
@Directive(
{
selector: 'button:not([type])'
})
export class ButtonTypeDirective implements OnInit
{
constructor(private el: ElementRef<HTMLButtonElement>, private renderer: Renderer2)
{
}
public ngOnInit()
{
this.renderer.setAttribute(this.el.nativeElement, 'type', 'button');
}
}