Angular 表单提交事件在父组件和子组件之间触发两次
Angular form submit event firing twice between parent and child components
我有一个奇怪的问题,我的子表单的表单提交事件在我的父表单上触发了两次。
child.component.html
<form [formGroup]="childForm" (ngSubmit)="childFormSubmit()">
...
</form>
child.component.ts
@Component({
selector: 'child-form',
templateUrl: 'login.component.html',
})
export class ChildComponent {
@Output() submit = new EventEmitter<any>();
public childForm: FormGroup;
childFormSubmit() {
if (this.childForm.valid) {
console.log('Child Form Submit')
this.submit.emit(this.childForm.value);
}
}
}
parent.component.html
<child-form (submit)="parentSubmit($event)"></child-form>
parent.component.ts
@Component({
selector: 'parent',
templateUrl: 'parent.component.html',
})
export class ParentComponent {
constructor() {
}
parentSubmit(event: any) {
console.log('Parent Submit');
}
}
提交子表单会在控制台输出中产生以下结果:
Child Form Submit
Parent Submit
Parent Submit
您在子组件上使用了保留字 'submit' 作为修饰函数和属性。因此,如果您在父组件中有一个表单,(submit)
(相当于 (ngSubmit)
)会与来自子组件的事件同时被触发。
将其更改为其他内容,如下所示:
<child-form (childSubmit)="parentSubmit($event)"></child-form>
在子组件中:
@Output() childSubmit = new EventEmitter<any>();
...
childFormSubmit() {
if (this.childForm.valid) {
console.log('Child Form Submit')
this.childSubmit.emit();
}
}
这是一个有效的 DEMO
我有一个奇怪的问题,我的子表单的表单提交事件在我的父表单上触发了两次。
child.component.html
<form [formGroup]="childForm" (ngSubmit)="childFormSubmit()">
...
</form>
child.component.ts
@Component({
selector: 'child-form',
templateUrl: 'login.component.html',
})
export class ChildComponent {
@Output() submit = new EventEmitter<any>();
public childForm: FormGroup;
childFormSubmit() {
if (this.childForm.valid) {
console.log('Child Form Submit')
this.submit.emit(this.childForm.value);
}
}
}
parent.component.html
<child-form (submit)="parentSubmit($event)"></child-form>
parent.component.ts
@Component({
selector: 'parent',
templateUrl: 'parent.component.html',
})
export class ParentComponent {
constructor() {
}
parentSubmit(event: any) {
console.log('Parent Submit');
}
}
提交子表单会在控制台输出中产生以下结果:
Child Form Submit
Parent Submit
Parent Submit
您在子组件上使用了保留字 'submit' 作为修饰函数和属性。因此,如果您在父组件中有一个表单,(submit)
(相当于 (ngSubmit)
)会与来自子组件的事件同时被触发。
将其更改为其他内容,如下所示:
<child-form (childSubmit)="parentSubmit($event)"></child-form>
在子组件中:
@Output() childSubmit = new EventEmitter<any>();
...
childFormSubmit() {
if (this.childForm.valid) {
console.log('Child Form Submit')
this.childSubmit.emit();
}
}
这是一个有效的 DEMO