发生错误:@Output 未初始化
An error occurred: @Output not initialized
我正在开发一个 angular 应用程序供管理人员跟踪他们的团队,但我遇到了 @Output 错误:
An error occurred: @Output deleteMeeting not initialized in 'MeetingItemComponent'.
我有一个 Meetings 组件,生成 MeetingItem 组件列表。我想在用户点击不同按钮时执行操作(编辑、删除、显示详细信息)。
这是我的 parent 会议模板:
<div class="meeting__list" [@newMeeting]="meetings.length">
<app-meeting-item
*ngFor="let meeting of meetings"
[meeting]="meeting"
(deleteMeeting)="deleteMeeting($event)"
(openMeetingDialog)="openMeetingDialog($event)"
(messageClick)="openMessage($event)"
></app-meeting-item>
</div>
我的 MeetingItem 模板(仅此post涉及的部分):
<span class="meeting__actions">
<mat-icon *ngIf="meeting.message" (click)="onMessageClick(meeting)" matTooltip="Read the message"
matTooltipPosition="above" class="icon--notes">notes</mat-icon>
<mat-icon (click)="onOpenMeetingDialog(meeting)" matTooltip="Edit this meeting" matTooltipPosition="above" class="icon--edit">edit</mat-icon>
<mat-icon (click)="onDeleteMeeting(meeting.id)" matTooltip="Delete this meeting" matTooltipPosition="above" class="icon--delete">delete_outline</mat-icon>
</span>
我的 MeetingItem 组件:
import { Component, Input, Output } from '@angular/core';
import { EventEmitter } from 'events';
@Component({
selector: 'app-meeting-item',
templateUrl: './meeting-item.component.html',
styleUrls: ['./meeting-item.component.scss']
})
export class MeetingItemComponent {
@Input() meeting;
@Output() deleteMeeting = new EventEmitter();
@Output() openMeetingDialog = new EventEmitter();
@Output() messageClick = new EventEmitter();
constructor() {}
onDeleteMeeting(meetingId) {
this.deleteMeeting.emit(meetingId);
}
onOpenMeetingDialog(meeting) {
this.openMeetingDialog.emit(meeting);
}
onMessageClick(meeting) {
this.messageClick.emit(meeting);
}
}
为了让您的代码在 stackblitz 中工作,我不得不替换
import { EventEmitter } from 'events';
和
import { EventEmitter } from '@angular/core';
在您的组件中只需使用核心 angular 模块。
只需将此代码放在文件开头即可。
import { EventEmitter } from '@angular/core';
我什至从 @angular/core
导入时也遇到了同样的问题。
问题:我正在从组件 class 的 ngOnInit
方法中初始化 EventEmmitter
对象。
解决方案:我将初始化移到了组件的 class 构造函数中。
有同样的错误,
导入是正确的
import { EventEmitter } from '@angular/core';
但是变量定义错误:
@Output() onFormChange: EventEmitter<any>;
应该是:
@Output() onFormChange: EventEmitter<any> = new EventEmitter();
对我来说,如果我改变下面的导入就可以了
从 'events' 导入 { EventEmitter };
到
import { Component, Output ,EventEmitter} from '@angular/core';
更改导入:import { EventEmitter } from 'events';
与:import { EventEmitter } from '@angular/core';
@Output() isAbout: EventEmitter<boolean> = new EventEmitter();
这应该是使它工作的完整语法你需要事件发射器的实例
我也遇到了同样的错误。我发现 VS Code 的 Auto Import 扩展可以做到这一点。 import * as EventEmitter from 'events';
被导入而不是 import { EventEmitter } from '@angular/core';
所以请确保导入是否正常。
我正在开发一个 angular 应用程序供管理人员跟踪他们的团队,但我遇到了 @Output 错误:
An error occurred: @Output deleteMeeting not initialized in 'MeetingItemComponent'.
我有一个 Meetings 组件,生成 MeetingItem 组件列表。我想在用户点击不同按钮时执行操作(编辑、删除、显示详细信息)。
这是我的 parent 会议模板:
<div class="meeting__list" [@newMeeting]="meetings.length">
<app-meeting-item
*ngFor="let meeting of meetings"
[meeting]="meeting"
(deleteMeeting)="deleteMeeting($event)"
(openMeetingDialog)="openMeetingDialog($event)"
(messageClick)="openMessage($event)"
></app-meeting-item>
</div>
我的 MeetingItem 模板(仅此post涉及的部分):
<span class="meeting__actions">
<mat-icon *ngIf="meeting.message" (click)="onMessageClick(meeting)" matTooltip="Read the message"
matTooltipPosition="above" class="icon--notes">notes</mat-icon>
<mat-icon (click)="onOpenMeetingDialog(meeting)" matTooltip="Edit this meeting" matTooltipPosition="above" class="icon--edit">edit</mat-icon>
<mat-icon (click)="onDeleteMeeting(meeting.id)" matTooltip="Delete this meeting" matTooltipPosition="above" class="icon--delete">delete_outline</mat-icon>
</span>
我的 MeetingItem 组件:
import { Component, Input, Output } from '@angular/core';
import { EventEmitter } from 'events';
@Component({
selector: 'app-meeting-item',
templateUrl: './meeting-item.component.html',
styleUrls: ['./meeting-item.component.scss']
})
export class MeetingItemComponent {
@Input() meeting;
@Output() deleteMeeting = new EventEmitter();
@Output() openMeetingDialog = new EventEmitter();
@Output() messageClick = new EventEmitter();
constructor() {}
onDeleteMeeting(meetingId) {
this.deleteMeeting.emit(meetingId);
}
onOpenMeetingDialog(meeting) {
this.openMeetingDialog.emit(meeting);
}
onMessageClick(meeting) {
this.messageClick.emit(meeting);
}
}
为了让您的代码在 stackblitz 中工作,我不得不替换
import { EventEmitter } from 'events';
和
import { EventEmitter } from '@angular/core';
在您的组件中只需使用核心 angular 模块。 只需将此代码放在文件开头即可。
import { EventEmitter } from '@angular/core';
我什至从 @angular/core
导入时也遇到了同样的问题。
问题:我正在从组件 class 的 ngOnInit
方法中初始化 EventEmmitter
对象。
解决方案:我将初始化移到了组件的 class 构造函数中。
有同样的错误,
导入是正确的
import { EventEmitter } from '@angular/core';
但是变量定义错误:
@Output() onFormChange: EventEmitter<any>;
应该是:
@Output() onFormChange: EventEmitter<any> = new EventEmitter();
对我来说,如果我改变下面的导入就可以了 从 'events' 导入 { EventEmitter };
到
import { Component, Output ,EventEmitter} from '@angular/core';
更改导入:import { EventEmitter } from 'events';
与:import { EventEmitter } from '@angular/core';
@Output() isAbout: EventEmitter<boolean> = new EventEmitter();
这应该是使它工作的完整语法你需要事件发射器的实例
我也遇到了同样的错误。我发现 VS Code 的 Auto Import 扩展可以做到这一点。 import * as EventEmitter from 'events';
被导入而不是 import { EventEmitter } from '@angular/core';
所以请确保导入是否正常。