#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, и я также использовал неправильный параметр в службе, которая получает данные из серверной части. Я также много раз проверял типы, прежде чем задать вопрос. Причина, по которой я сохраняю этот вопрос, заключается в том, чтобы помочь другим парням, которые могут совершить ту же ошибку, что и я. Спасибо за вашу помощь!