javascript - Angular formulärskickningshändelse som avfyras två gånger mellan föräldra- och barnkomponenter
Jag har ett konstigt problem där händelsen för formulärskickande på mitt barnformulär utlöses två gånger på mitt föräldraformulär.
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');
}
}
Att skicka in barnformuläret resulterar i följande i konsolutdata:
Child Form Submit
Parent Submit
Parent Submit
Svar #1
Du har använt ett reserverat ord 'submit' på en barnkomponent som dekoratorfunktion och attribut. Så om du har ett formulär i en föräldrakomponent, (submit) (vilket är ekvivalent med (ngSubmit)) utlöses samtidigt som händelsen från barnet. Ändra det till något annat, som detta:
<child-form (childSubmit)="parentSubmit($event)"></child-form>
och i barnkomponenten:
@Output() childSubmit = new EventEmitter<any>();
...
childFormSubmit() {
if (this.childForm.valid) {
console.log('Child Form Submit')
this.childSubmit.emit();
}
}
Här är en fungerande DEMO
