Đã xảy ra lỗi: @Output không được khởi tạo


101

Tôi đang làm việc trên một ứng dụng góc cạnh để người quản lý theo dõi nhóm của họ và tôi đang gặp lỗi @Output:

An error occurred: @Output deleteMeeting not initialized in 'MeetingItemComponent'.

Tôi có thành phần Cuộc họp, tạo danh sách các thành phần Mục họp. Tôi muốn thực hiện các hành động khi người dùng nhấp vào các nút khác nhau (chỉnh sửa, xóa, hiển thị chi tiết).

Đây là mẫu Cuộc họp dành cho phụ huynh của tôi:

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

Mẫu MeetingItem của tôi (chỉ phần có liên quan trong bài đăng này):

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

Thành phần MeetingItem của tôi:

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

1
Mã được cung cấp trông ổn và sẽ dễ dàng theo dõi vấn đề hơn nếu bạn có thể cung cấp bản trình diễn stackblitz.
Sunil Singh

Câu trả lời:


383

Để làm cho mã của bạn hoạt động trong stackblitz , tôi đã phải thay thế

import { EventEmitter } from 'events';

với

import { EventEmitter } from '@angular/core';

5
Chỉ có cùng một vấn đề, tôi rất vui vì tôi đã tìm thấy câu trả lời! Tôi đã tự hỏi tại sao EventEmitter tôi đã không có loại generic ;-)
MoxxiManagarm

Làm việc cho tôi cũng vậy, tôi cũng gặp phải vấn đề tương tự.
Vladimir Despotovic

3
Tôi đã dành một giờ, và sau đó thấy điều này. Bực bội. Cảm ơn vì câu trả lời :)
Pankaj Parkar

11
Một khoảnh khắc im lặng cho những người đang ở đây do nhập tự động từ mã VS đã nhập eventsthay vì @angular/core.
Pramesh Bajracharya

1
@ArthurSiqueira Tôi thấy đau: D.
Pramesh Bajracharya

20

Có cùng một lỗi,

Nhập đúng như thế

import { EventEmitter } from '@angular/core';

Nhưng định nghĩa biến đã sai:

@Output() onFormChange: EventEmitter<any>;

Nên là:

@Output() onFormChange: EventEmitter<any> = new EventEmitter();

Đúng. Lỗi tương tự xảy ra khi EventEmitter không được khởi chạy với thành phần. Tôi đã thử khởi tạo nó trong một hàm (để giảm tải chế độ xem ban đầu), nhưng Angular sẽ không có.
Jai

3

Tôi đã gặp vấn đề tương tự ngay cả khi nhập từ @angular/core.

Vấn đề : Tôi đang khởi tạo EventEmmitterđối tượng trong ngOnInitphương thức từ lớp thành phần của mình. Giải pháp : Tôi đã chuyển phần khởi tạo sang hàm tạo lớp của thành phần.


2

Trong thành phần của bạn chỉ cần sử dụng mô-đun góc cạnh lõi. Đơn giản chỉ cần đặt mã này ở đầu tệp.

import { EventEmitter } from '@angular/core'; 

8
Câu trả lời của bạn dường như là một bản sao của một phần câu trả lời của ConnorsFan. Tôi nghĩ bạn nên xóa nó
Fabrizio

1

Đối với tôi, nó hoạt động nếu tôi thay đổi bên dưới nhập import {EventEmitter} từ 'sự kiện';

đến

import { Component, Output ,EventEmitter} from '@angular/core';

0

thay đổi nhập: import { EventEmitter } from 'events'; với:import { EventEmitter } from '@angular/core';


thêm một số giải thích về những gì đã sai và cách giải pháp của bạn hoạt động.
Abhishek

0

@Output() isAbout: EventEmitter<boolean> = new EventEmitter(); Đây phải là toàn bộ cú pháp để làm cho nó hoạt động, bạn cần phiên bản của trình phát sự kiện

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.