【问题标题】:Angular 9 - Event Emitter does not emitAngular 9 - 事件发射器不发射
【发布时间】:2020-06-10 02:59:22
【问题描述】:

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

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();
}

Form-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>

Form Modal.ts

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

下面是我得到的输出:

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

谢谢! 阿迪亚普拉卡什

【问题讨论】:

  • EventEmitter 是通用 AFIK。仔细检查您是从 @angular/core 导入的
  • 感谢@dcg 的回复,下面是我在form.ts 中的导入语句 import { Component, OnInit, Output, EventEmitter } from '@angular/core';

标签: angular angular-event-emitter


【解决方案1】:

你用错了——

<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)
  }
}

【讨论】:

  • 您好 Vimal,感谢您的回复。我将代码修改为 - @Component({ selector: 'app-order-form-modal', template: &lt;app-order-form (userEmail)="setEmail($event)"&gt;{{email}}&lt;/app-order-form&gt;, styleUrls: ['./order-form-modal.component.css'] }) 仍然没有输出.您能告诉我更改是否准确吗?
  • 能否分享更新组件的完整代码?
  • import { Component} from '@angular/core'; import { MatDialogRef } from '@angular/material/dialog'; @Component({ selector: 'app-order-form-modal', template: {{email}}, styleUrls: ['./order-form-modal.component.css'] }) export class OrderFormModalComponent { constructor(private dialogRef: MatDialogRef&lt;OrderFormModalComponent&gt;) { } email; setEmail(userEmail:string) { this.email=userEmail console.log(userEmail) } closeOrderFormModal() { this.dialogRef.close(); } }
  • 没有 {{email}} 你把 {{email}} /html 子组件的文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-01
  • 2020-07-12
  • 2019-02-01
  • 1970-01-01
  • 2017-03-07
  • 1970-01-01
相关资源
最近更新 更多