EventEmitter.emit() не является функцией

#angular #typescript #angular9 #eventemitter #primeng-dropdowns

#angular #typescript #angular9 #eventemitter #primeng-выпадающие списки

Вопрос:

У меня есть дочерний компонент, в котором я использую выпадающий список из подключаемого модуля primeng для отправки его значения родительскому элементу всякий раз, когда пользователь изменяет выбор. Я использую функцию EventEmitter.emit() для выдачи значения типа Solution . Решение — это интерфейс, определенный мной.
Вот как я определил эмиттер:

 @Output('solutionChange') selectedSolution: EventEmitter<Solution> = new EventEmitter<Solution>();
  

Вот как я вызвал эмиттер:

 public onSolutionChange(args) {
    let solution: Solution = args.value as Solution;
    this.selectedSolution.emit(solution);
  }
  

Проблема в том, что когда я вызываю функцию emit(), она выдает ошибку TypeError: emit не является функцией.

Я уже пытался изменить определение эмиттера на @Output('solutionChange') selectedSolution: EventEmitter<any> = new EventEmitter<any>(); , потому что args.value — это любой тип, исходящий из серверной части, но все та же ошибка. Я также попытался заменить функцию emit() на функцию next() .

Комментарии:

1. Покажите, как именно вы импортируете EventEmitter .

2. Вы хотите импортировать Angular / core / eventemitter …

Ответ №1:

Вероятно, вы импортируете неправильно EventEmitter , что может произойти автоматически в IDE, такой как VS Code. Он пытается импортировать Node.js events EventEmitter убедитесь, что вы импортируете из @angular/core EventEmitter, например:

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

Надеюсь, это поможет!

Комментарии:

1. Я использовал этот импорт. Спасибо

2. Нет, это не так. Я использовал импорт, который вы мне предложили, но это была другая проблема. Спасибо за вашу помощь!

Ответ №2:

Мне удалось ее решить. Я пытался решить ее около часа, и когда я подумал, что у меня нет других вариантов, я решил обратиться за помощью. Это была моя ошибка, потому что я не был осторожен с параметром, который я указал в ngModel, в HTML, и я также использовал неправильный параметр в службе, которая получает данные из серверной части. Я также много раз проверял типы, прежде чем задать вопрос. Причина, по которой я сохраняю этот вопрос, заключается в том, чтобы помочь другим парням, которые могут совершить ту же ошибку, что и я. Спасибо за вашу помощь!