Должен ли ng-bootstrap 8.x.x запрашивать входные компоненты?

#angular #modal-dialog #ng-bootstrap #angular10

#angular #модальный диалог #ng-bootstrap #angular10

Вопрос:

Я обновляю приложение Angluar с версии 9.1.x до версии 10.2.x, а затем обновляю ng-bootstrap до версии 8.x.x. После этого модалы перестали работать, и я получаю сообщение об ошибке в консоли браузера с вопросом, указан ли рассматриваемый компонент какan entryComponent

Это ожидаемое поведение? Насколько я понимаю, entryComponents в Angular 9 больше не требуется, и действительно, когда мы запускали Angluar v9.1.x и ng-bootstrap v6.x, нам это не нужно.

На самом деле это вопрос «да» или «нет», поэтому я не знаю, какой отладочный код я могу предоставить, кроме чего-то подобного:

 @NgModule({
  declarations: [
    // components
  ],
  imports: [
    // imports
  ],
  providers: [
    // providers
  ],
  bootstrap: [AppComponent],
  entryComponents: [
    TestComponent // <-- this used to not be required by ng-bootstrap, and it not required by Angular 9x 
                  //     but any calls to NgbModal.open generate an error asking if the TestComponent is in the entry components
  ]
})
export class AppModule { }
  

Ответ №1:

Я наконец нашел ответ в документации — не уверен, как я пропустил его раньше. Ответ «да» — когда вы хотите открыть модальный файл с компонентом в качестве содержимого, компонент должен быть в entryComponent списке вашего модуля Angular.

Вы можете передать существующий компонент в качестве содержимого модального окна. В этом случае не забудьте добавить компонент содержимого в качестве раздела entryComponents вашего NgModule.

Источник: https://ng-bootstrap.github.io/#/components/modal/examples#component

Пример приложения: https://stackblitz.com/edit/h7vehb—run?file=package.json

Их пример приложения работает под управлением Angluar 10.x и ng-bootstrap 8.0