Хорошо, во-первых, я уже искал эту проблему как сумасшедший и нашел несколько решений (некоторые из них описаны здесь), но ни одно из них не объясняет эффективный способ сделать это. Итак, я иду...
О чем это
Я создаю модальное окно, которое использует ng-bootstrap. Я сделал компонент формы, чтобы повторно использовать его на других страницах. Я поместил этот компонент внутрь модального окна. Мне нужно получить доступ к переменным и методам этого компонента от родительского компонента, поэтому я установил переменную ViewChild в родительском компоненте и установил ее в дочерний компонент.
Когда я открываю модальное окно, компонент отображается без проблем. Проблемы возникают, когда я нажимаю кнопку «Создать». Когда пользователь нажимает кнопку «Создать», родитель (который содержит модальное окно) выполняет дочерний метод для отправки формы, но родитель не может связаться с дочерним методом, потому что он не определен, даже если модальное окно уже открыто.
Что я уже пробовал
Я попытался поместить компонент Child вне ng-шаблона, и он отлично работает, но мне нужно, чтобы он был модальным.
Я также попытался передать компонент с #id в директиве методу родителя, чтобы выполнить дочерний метод. Это работает, но делает код более грязным и приносит больше проблем в будущем. (На самом деле это я из будущего, у которого больше проблем с этой реализацией.)
Если кто-то задается вопросом, какие проблемы это приносит, мне нужно вложить больше компонентов в дочерний компонент, поэтому, поскольку этот «внучатый» компонент все еще находится в ng-шаблоне, проблема повторяется, и теперь я должен снова сделать код более грязным. ..
Код (приложение Stackblitz)
Вот приложение Stackblitz, которое я сделал. Я сделал это довольно просто и исключил ненужные части кода, которые не имеют отношения к проблеме. Приложение Stackblitz
Ошибка сообщения, которую я получаю
Это сообщение об ошибке, которое я получаю:
ERROR TypeError: Cannot read property 'sendClassForm' of undefined
Я читал, что когда ng-template еще не отрендерен (например, модальное окно не было открыто), вы получаете эту ошибку undefined
, но я не понимаю, почему это все еще происходит, когда он уже открыт.
Угловая версия: 8.1.2
"@ng-bootstrap/ng-bootstrap": "^5.1.0"