오류가 발생했습니다. @Output이 초기화되지 않았습니다.


116

관리자가 팀을 추적 할 수 있도록 각도 앱을 개발 중이며 @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>

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

내 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
제공된 코드는 괜찮아 보이며 stackblitz 데모를 제공 할 수 있다면 문제를 추적하기가 더 쉽습니다.
Sunil Singh

답변:


428

A의 코드 작동하려면 stackblitz , 나는 대체했다

import { EventEmitter } from 'events';

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

5
같은 문제가 발생했습니다. 답을 찾게되어 기쁩니다! 내 EventEmitter 더 제네릭 형식 ;-) 없었다 왜 난 이미 궁금
MoxxiManagarm

나를 위해 일했는데 같은 문제가있었습니다.
Vladimir Despotovic

4
나는 한 시간을 보냈고 이것을 보았다. 실망 스럽네요. :) 대답을 주셔서 감사합니다
판 카즈 Parkar

16
events대신 가져온 VS 코드에서 자동 가져 오기로 인해 여기에있는 사람들을위한 잠시 침묵 @angular/core.
Pramesh Bajracharya

1
@ArthurSiqueira 나는 고통을 느낀다 : D.
Pramesh Bajracharya

22

같은 오류가 발생했습니다.

가져 오기가 정확했습니다.

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

그러나 변수 정의가 잘못되었습니다.

@Output() onFormChange: EventEmitter<any>;

해야한다:

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

예. EventEmitter가 구성 요소로 초기화되지 않은 경우에도 동일한 오류가 발생합니다. (초기 뷰로드를 줄이기 위해) 함수 내에서 초기화를 시도했지만 Angular에는 없습니다.
Jai

3

에서 가져올 때도 동일한 문제가 발생했습니다 @angular/core.

문제 : 구성 요소 클래스 EventEmmitterngOnInit메서드에서 개체를 초기화했습니다 . 솔루션 : 초기화를 구성 요소의 클래스 생성자로 옮겼습니다.


2

구성 요소에서 핵심 각도 모듈을 사용하십시오. 이 코드를 파일 시작 부분에 넣으십시오.

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

9
귀하의 답변은 ConnorsFan 답변의 일부 사본으로 보입니다. 나는 당신이 그것을 삭제해야한다고 생각
파브리 지오

1

나를 위해 아래에서 변경하면 작동합니다 import {EventEmitter} from 'events';

...에

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

1

가져 오기를 변경하십시오 import { EventEmitter } from 'events'; .import { EventEmitter } from '@angular/core';


무엇이 잘못되었고 솔루션이 어떻게 작동하는지에 대한 설명을 추가하십시오.
Ak47

1

@Output() isAbout: EventEmitter<boolean> = new EventEmitter(); 이벤트 이미 터의 인스턴스가 필요하므로 작동하도록 전체 구문이어야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.