एक त्रुटि हुई: @Output को प्रारंभ नहीं किया गया


113

मैं प्रबंधकों के लिए अपनी टीमों पर नज़र रखने के लिए एक कोणीय ऐप पर काम कर रहा हूं, और मैं एक @ त्रुटि के साथ फंस गया हूं:

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

मेरे पास मीटिंग्स घटक है, जिससे 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>

मेरा मीटिंग इटेम टेम्पलेट (केवल इस पोस्ट से संबंधित भाग):

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

मेरी बैठक

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
बशर्ते कोड ठीक लगे और समस्या को ट्रेस करना आसान होगा यदि आप स्टैकब्लिट्ज़ डेमो प्रदान कर सकते हैं।
सुनील सिंह

जवाबों:


421

स्टैकब्लिट्ज़ में आपके कोड को काम करने के लिए , मुझे प्रतिस्थापित करना पड़ा

import { EventEmitter } from 'events';

साथ में

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

5
बस एक ही मुद्दा था, मुझे खुशी है कि मुझे जवाब मिल गया! मैं पहले से ही सोच रहा था कि मेरे EventEmitter का कोई सामान्य प्रकार क्यों नहीं ;-)
MoxxiManagarm

मेरे लिए भी काम किया, मुझे भी यही समस्या थी।
व्लादिमीर डेस्पोटोविक

4
मैंने एक घंटा बिताया, और फिर यह देखा। निराशा होती। उत्तर के लिए धन्यवाद :)
पंकज पारकर

15
जो लोग यहाँ कि आयातित वी.एस. कोड से एक ऑटो आयात की वजह से कर रहे हैं के लिए मौन की एक पल eventsके बजाय @angular/core
प्रमेश बजराचार्य

1
@ArthurSiqueira मुझे दर्द महसूस होता है: डी।
प्रमेश बजराचार्य

22

एक ही त्रुटि थी,

आयात की तरह सही था

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

लेकिन चर परिभाषा गलत थी:

@Output() onFormChange: EventEmitter<any>;

होना चाहिए:

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

हाँ। EventEmitter घटक के साथ प्रारंभ नहीं किया गया है जब एक ही त्रुटि होती है। मैंने इसे एक फंक्शन के भीतर शुरू करने की कोशिश की (शुरुआती व्यू लोड को कम करने के लिए), लेकिन एंगुलर में यह नहीं होगा।
जय

3

मुझे आयात करने से भी यही समस्या थी @angular/core

समस्या : मैं अपने घटक वर्ग से विधि EventEmmitterमें ऑब्जेक्ट को इनिशियलाइज़ कर रहा था ngOnInitसमाधान : मैंने घटक के क्लास कंस्ट्रक्टर को इनिशियलाइज़ेशन दिया।


2

अपने घटक में बस कोर कोणीय मॉड्यूल का उपयोग करें। बस फ़ाइल की शुरुआत में इस कोड डाल दिया।

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

9
आपका उत्तर कॉनरसफ़ान के उत्तर के भाग की एक प्रति लगता है। मुझे लगता है कि आपको इसे हटा देना चाहिए
Fabrizio

1

मेरे लिए यह काम करता है अगर मैं नीचे आयात करता हूं 'घटनाओं' से {EventEmitter} आयात;

सेवा

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(); यह संपूर्ण सिंटैक्स होना चाहिए ताकि यह काम कर सके कि आपको इवेंट एमिटर की आवश्यकता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.