NgbModal универсальный сервис - PullRequest
1 голос
/ 28 апреля 2019

Я хочу иметь возможность показывать формы в модальном или на странице.Мои формы на страницах довольно просты, потому что и страница, и форма существуют в одном модуле.Однако для форм в модальных моделях все немного по-другому.

Я хочу создать общий сервис, который я могу вызывать и передавать в компонент, чтобы этот компонент отображался в модальном режиме.Так что у моего сервиса есть такой метод:

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?

1 Ответ

0 голосов
/ 28 апреля 2019

У меня есть защищенный модуль с отложенной загрузкой. В защищенном модуле у меня есть PracticeFormComponent - форма, которую я хочу показать в моем модале.

Фабрика компонентов PracticeFormComponent не существует, пока не загружен ленивый модуль.

Когда я пытаюсь вызвать modalService.showForm (PracticeFormComponent) со страницы, которая также объявлена ​​в SecureModule

Вы используете класс компонента (функцию конструктора) вместо фабрики компонентов. WebPack позволит вам импортировать эту функцию непосредственно из файла TypeScript. Таким образом, не будет никаких ошибок времени компиляции, но во время выполнения модальные службы будут пытаться обнаружить фабрику компонентов по этой ссылке, и она будет использовать инжектор зависимостей, который использовался для создания этого сервера.

Вам нужно изменить функцию showForm(), чтобы она требовала фабрики компонентов вместо any, и использовать ее для создания модального типа.

Это поможет вам решить проблемы, связанные с зависимостями модуля, поскольку вы не сможете получить фабрику, если она не существует в DI.

Вы можете создавать модалы внутри ленивого модуля, но не снаружи. Если вам нужно сделать это вне ленивого модуля, то этот модальный компонент на самом деле не ленивый. Это общий компонент.

...