Angular 9 - 事件发射器不发射

Angular 9 - Event Emitter does not emit

我正在尝试使用事件发射器将数据从表单组件传递到模态组件。以下是我的配置方式 -

Form.ts

@Output() userEmail = new EventEmitter;

submit(order): void {
this.userEmail.emit(order.value.email);
console.log('1', order.value.email);
this.orderForm.postOrderForm(order.value);
this.openOrderFormModal();
}

表格-modal.html

<div id="order-form-modal">
    <h3>{{ 'order.form.notify.heading.1' | translate }} </h3>
    <p> {{ 'order.form.notify.msg.1' | translate }}</p>
    <p> {{ 'order.form.notify.msg.2' | translate }}</p>
    <p (userEmail)="setEmail($event)">{{email}}</p>
    <button (click)="closeOrderFormModal()" class="btn btn-outline-primary">Close</button>
</div>

表格Modal.ts

email;
setEmail(userEmail:string) {
this.email=userEmail
console.log(userEmail)
}

下面是我得到的输出:

我的表单模块如下 - 表格(文件夹) Form.html Form.ts Form-Modal(文件夹) 表格-Modal.html 表格-Modal.ts 请协助。如果您需要更多信息,请告诉我。

谢谢! 阿迪亚普拉卡什

你用错了 -

<p (userEmail)="setEmail($event)">{{email}}</p>

您不能将在组件上创建的自定义 EventEmitter 用作 HTML 元素上的指令。

用法是,考虑父子组件-

@Component({
  selector: 'app-child',
  template: ` ... some template .....   `
})
class ChildComponent {

  @Output() userEmail = new EventEmitter();         <-------------- Also, EventEmitter is a class. You need to create an instance of it

  submit(order): void {
      this.userEmail.emit(order.value.email);
   }
}

您可以在父组件中监听 userEmail 事件 -

@Component({
  selector: 'app-parent',
  template: ` <app-child (userEmail)="emailChanged($event)"></app-child>  `
})
class ParentComponent {
  emailChanged(userEmail:string) {
    console.log(userEmail)
  }
}