Сталася помилка: @Output не ініціалізовано


103

Я працюю над кутовим додатком для менеджерів, щоб стежити за своїми командами, і я застряг у помилці @Output:

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

У мене є компонент Meetings, який генерує список компонентів MeetingItem. Я хочу виконувати дії, коли користувач натискає різні кнопки (редагувати, видаляти, показувати деталі).

Ось шаблон батьківських зборів:

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

Шаблон My MeetingItem (лише частина, що стосується цього повідомлення):

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

Компонент My 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);
  }
}

1
Наданий код виглядає нормально, і було б простіше відстежити проблему, якщо ви можете надати демонстрацію стек-бліц.
Суніл Сінгх

Відповіді:


385

Щоб ваш код працював у стек-бліці , мені довелося замінити

import { EventEmitter } from 'events';

з

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

5
Щойно у мене була та сама проблема, я радий, що знайшов відповідь! Я вже дивувався, чому мій EventEmitter не мав загального типу ;-)
MoxxiManagarm

Працював у мене теж, у мене була та сама проблема.
Володимир Деспотович

3
Я провів годину, а потім побачив це. Розчарування. Дякую за відповідь :)
Pankaj Parkar

11
Хвилинка мовчання для тих, хто тут, завдяки автоматичному імпорту з коду VS, який імпортувався eventsзамість @angular/core.
Прамеш Байрачар'я,

1
@ArthurSiqueira Я відчуваю біль: D.
Прамеш Байрачар'я

21

Мала таку ж помилку,

Імпорт був правильним, як

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

Але визначення змінної було помилковим:

@Output() onFormChange: EventEmitter<any>;

Має бути:

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

Так. Така сама помилка виникає, коли EventEmitter не ініціалізується з компонентом. Я спробував ініціалізувати його у межах функції (щоб зменшити початкове навантаження перегляду), але Angular цього не матиме.
Джай

3

У мене була така сама проблема навіть з імпортом @angular/core.

Проблема : я ініціалізував EventEmmitterоб’єкт у ngOnInitметоді зі свого класу компонентів. Рішення : Я перемістив ініціалізацію до конструктора класу компонента.


2

У вашому компоненті просто використовуйте основний кутовий модуль. Просто поставте цей код на початку файлу.

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

8
Ваша відповідь здається копією частини відповіді ConnorsFan. Думаю, вам слід його видалити
Фабріціо

1

Для мене це працює, якщо я заміню імпорт імпорту {EventEmitter} з "подій";

до

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

0

змінити імпорт: за import { EventEmitter } from 'events'; допомогою:import { EventEmitter } from '@angular/core';


додайте пояснення того, що було не так і як працює ваше рішення.
Абхішек

0

@Output() isAbout: EventEmitter<boolean> = new EventEmitter(); Це повинен бути весь синтаксис, щоб він працював, вам потрібен екземпляр випромінювача подій

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.