Я использую шаблон Angular 4 с веб-пакетом, и у меня появляется эта ошибка, когда я пытаюсь использовать компонент (ConfirmComponent):
Не найдена фабрика компонентов для ConfirmComponent. Вы добавили его в @ NgModule.entryComponents?
Компонент объявлен в app.module.server.ts
@NgModule({
bootstrap: [ AppComponent ],
imports: [
// ...
],
entryComponents: [
ConfirmComponent,
],
})
export class AppModule { }
У меня также app.module.browser.ts
иapp.module.shared.ts
Как я могу это исправить?
ConfirmComponent
детали не достаточно, чтобы ответить на ваш вопросОтветы:
Добавьте это в свой
module.ts
,если ConfirmComponent находится в другом модуле, вам нужно экспортировать его туда, чтобы вы могли использовать его снаружи, добавьте:
--- Обновите Angular 9 или Angular 8 с явно включенным Ivy ---
Компоненты входа с Ivy больше не требуются и теперь устарели
--- для угловых 9 и 8 с отключенным плющом ---
В случае динамически загружаемого компонента и для генерации ComponentFactory этот компонент также должен быть добавлен в элемент entryComponents:
согласно определению entryComponents
источник
Смотрите подробности о
entryComponent
:Если вы загружаете какой-либо компонент динамически, то вам нужно поместить его в
declarations
иentryComponent
:источник
entryComponents
было решением - спасибо!entryComponents
ни добавление его кexports
мне не работало. НО я могу вызвать ModalComponent из некоторых других компонентов, которые не являются внукамиTL; DR: Служба в NG6 с
providedIn: "root"
не может найти ComponentFactory , когда компонент не добавляется вentryComponents
из app.module .Эта проблема также может возникнуть, если вы используете angular 6 в сочетании с динамическим созданием компонента в сервисе!
Например, создание наложения:
Проблема в том,
определение, которое предоставляет этот сервис в app.module .
Поэтому, если ваша служба находится, например, в «OverlayModule», где вы также объявили OverlayExampleComponent и добавили его в entryComponents, службе не удастся найти ComponentFactory для OverlayExampleComponent.
источник
providedIn
и вместо этого используяproviders
опцию на модуле.Я была такая же проблема. В этом случае
imports [...]
крайне важно, потому что это не будет работать, если вы не импортируетеNgbModalModule
.Описание ошибки говорит, что компоненты должны быть добавлены в
entryComponents
массив, и это очевидно, но убедитесь, что вы добавили этот в первую очередь:источник
Добавьте этот компонент в entryComponents в @NgModule модуля вашего приложения:
а также объявления:
источник
entryComponents
ни добавление его кexports
мне не работало. НО я могу вызвать ModalComponent из некоторых других компонентов, которые не являются внукамиДобавьте 'NgbModalModule' в импорт и имя вашего компонента в entryComponents App.module.ts, как показано ниже
источник
entryComponents
ни добавление его кexports
мне не работало. НО я могу вызвать ModalComponent из некоторых других компонентов, которые не являются внукамиПоместите компоненты, которые создаются динамически, в entryComponents под функцией @NgModuledecorator.
источник
entryComponents
в соответствующий модуль ng, который объявлен.entryComponents
ни добавление его кexports
мне не работало. НО я могу вызвать ModalComponent из некоторых других компонентов, которые не являются внукамиУ меня такая же проблема с angular 6, вот что у меня сработало:
Если у вас есть сервис, такой как ConfirmService , его нужно объявить в поставщиках текущего модуля вместо root
источник
У меня была такая же проблема для начальной загрузки
Если это ваш случай, просто добавьте компонент в объявления модуля и entryComponents, как предлагают другие ответы, но также добавьте это в свой модуль.
источник
Эта ошибка возникает, когда вы пытаетесь загрузить компонент динамически и:
в роутингМодуле
или в модуле
Чтобы исправить эту ошибку, вы можете добавить маршрутизатор к компоненту или добавить его в entryComponents модуля.
источник
У меня была такая же проблема в Angular7 при создании динамических компонентов. Существует два компонента (TreatListComponent, MyTreatComponent), которые необходимо загружать динамически. Я просто добавил массив entryComponents в мой файл app.module.ts.
источник
если вы используете маршрутизацию в вашем приложении
например :
источник
В моем случае я вообще не нуждался в entryComponents - просто базовая настройка, как описано в ссылке ниже, но мне нужно было включить импорт как в модуль основного приложения, так и в модуль вложения.
https://medium.com/@sunilk/getting-started-angular-6-and-ng-bootstrap-4-4b314e015c1c
Вам нужно только добавить его в entryComponents, если компонент будет включен в модальное. Из документов:
источник
error TS2339: Property 'forRoot' does not exist on type 'typeof NgbModule'.
используя угловой 8Я получил ту же проблему с ag-grid с использованием динамических компонентов. Я обнаружил, что вам нужно добавить динамический компонент в модуль ag-grid .withComponents []
импорт: [StratoMaterialModule, BrowserModule, AppRoutingModule, HttpClientModule, BrowserAnimationsModule, NgbModule.forRoot (), FormsModule, ReactiveFormsModule, AppRoutingModule, AgGridModule.withComponents (ProjectUpdateButtonComponent) ],
источник
В моем случае я забыл добавить
MatDialogModule
импорт в дочерний модуль.источник
Для уточнения здесь. В случае, если вы не используете
ComponentFactoryResolver
непосредственно в компоненте и хотите абстрагировать его для обслуживания, которое затем внедряется в компонент, вы должны загрузить его в соответствии с поставщиками для этого модуля, поскольку при загрузке с отложенной загрузкой он не будет работать.источник
Если после предоставления класса диалога компонента у вас все еще есть ошибка
entryComponents
, попробуйте перезапуститьng serve
- у меня это сработало.источник
Моя ошибка была вызвана открытым методом NgbModal с неверными параметрами из .html
источник
Вы должны импортировать
NgbModule
в модуль следующим образом:источник
entryComponents
жизненно важно. Выше ответы на это верны.Но...
providedIn: 'root'
наprovidedIn: MyModule
. Как общая хорошая практика, вы должны просто использоватьprovidedIn: SomeModule
для всех служб диалога, которые находятся в модулях.источник
Я использую Angular8, и я пытаюсь динамически открыть компонент из другого модуля. В этом случае вам нужно
import the module
войти в модуль, который пытается открыть компонент, конечно в дополнение кexport
компоненту, и вывести его вentryComponents
массив как и предыдущие ответы.источник
В моем случае я решил эту проблему следующим образом:
1) размещение
NgxMaterialTimepickerModule
вapp module imports:[ ]
2) размещение
NgxMaterialTimepickerModule
вtestmodule.ts imports:[ ]
3) размещение
testcomponent
вdeclartions:[ ]
иentryComponents:[ ]
(Я использую угловую версию 8+)
источник
Объявить все новые страницы в app.module
источник