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

Relaterade artiklar