Rem*_*tec 16 javascript forms typescript angular-components angular
我有一个奇怪的问题,我的子表单的表单提交事件在我的父表单上触发了两次.
child.component.html
<form [formGroup]="childForm" (ngSubmit)="childFormSubmit()">
...
</form>
Run Code Online (Sandbox Code Playgroud)
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
parent.component.html
<child-form (submit)="parentSubmit($event)"></child-form>
Run Code Online (Sandbox Code Playgroud)
parent.component.ts
@Component({
selector: 'parent',
templateUrl: 'parent.component.html',
})
export class ParentComponent {
constructor() {
}
parentSubmit(event: any) {
console.log('Parent Submit');
}
}
Run Code Online (Sandbox Code Playgroud)
提交子表单会在控制台输出中产生以下结果:
Child Form Submit
Parent Submit
Parent Submit
Run Code Online (Sandbox Code Playgroud)
Veg*_*ega 39
您已在子组件上使用保留字'submit'作为装饰器功能和属性.因此,如果您在父组件中有表单(submit)
(相当于(ngSubmit)
),则会与子项中的事件同时触发.将其更改为其他内容,如下所示:
<child-form (childSubmit)="parentSubmit($event)"></child-form>
Run Code Online (Sandbox Code Playgroud)
在子组件中:
@Output() childSubmit = new EventEmitter<any>();
...
childFormSubmit() {
if (this.childForm.valid) {
console.log('Child Form Submit')
this.childSubmit.emit();
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个有效的DEMO
归档时间: |
|
查看次数: |
5961 次 |
最近记录: |