Я хочу иметь возможность отображать формы в модальном режиме или на странице. Мои формы на страницах довольно просты, потому что и страница, и форма существуют в одном и том же модуле. Однако для форм в модальных окнах все немного иначе.
Я хочу создать общий сервис, который я могу вызвать и передать компоненту, чтобы этот компонент отображался в модальном режиме. Итак, мой сервис имеет такой метод:
showForm(component: any, options?:NgbModalOptions){
const modal = this.ngbModal.open(content, {
backdrop: 'static',
size: 'lg',
...options
});
...
}
Этот модальный сервис должен был находиться в моем SharedModule, который импортируется на уровне модуля приложения. Затем у меня есть безопасный модуль, который загружается лениво. В безопасном модуле у меня есть компонент PracticeFormComponent, который является формой, которую я хочу показать в своем модальном окне. У меня есть PracticeFormComponent в объявлениях, экспорте и entryComponents SecureModule.
Когда я пытаюсь вызвать modalService.showForm(PracticeFormComponent) со страницы, которая также объявлена в SecureModule, я получаю сообщение об ошибке: «Фабрика компонентов не найдена». Я не уверен, что мне здесь не хватает.
Если кто-нибудь может помочь мне с этим, а также со вторым вопросом, можно ли вызвать FormComponent для загрузки из другого модуля, даже если он является лениво загруженным дочерним элементом или братом SecureModule?





I then have a secure module that is lazy loaded. In the secure module I have a PracticeFormComponent that is the form that I want to show in my modal.
Фабрика компонентов PracticeFormComponent не существует, пока не загружен ленивый модуль.
When I try to call modalService.showForm(PracticeFormComponent) from a page that is also declared in SecureModule
Вы используете класс компонента (функция конструктора) вместо фабрики компонентов. WebPack позволит вам импорт эту функцию прямо из файла TypeScript. Таким образом, не будет никаких ошибок времени компиляции, но во время выполнения модальные службы попытаются обнаружить фабрику компонентов по этой ссылке, и она будет использовать инжектор зависимостей, который использовался для создания этого сервера.
Вам нужно изменить функцию showForm(), чтобы она требовала фабрику компонентов вместо any, и использовать ее для создания модального окна.
Это затем поможет вам решить проблемы с зависимостями, связанные с модулем, потому что вы не сможете получить фабрику, если она не существует в DI.
Вы можете создавать модальные окна внутри ленивого модуля, но не снаружи. Если вам нужно сделать это вне ленивого модуля, то этот модальный компонент на самом деле не ленивый. Это общий компонент.