javascript - 尽管我的组件已在我的模块的 entryComponents 选项中声明,但 Angular 如何找不到该组件的组件工厂?

标签 javascript angular typescript dependency-injection

我想在 ngx-bootstrap's modal 中显示一个组件但我怎样才能动态创建它呢?

我尝试在 RegMktRiskHomeModuleentryComponents 选项中声明该组件,但它也不起作用。我目前找到的唯一方法是在 AppModule 中声明 ScenariosGraphComponent,就像我在 RegMktRiskCommonModule 中所做的那样。

这是否与 RegMktRiskHomeModule 导入到 HomeModule 中并且该 HomeModule 由应用程序延迟加载这一事实有关?

这是我的代码(大致):

reg-mkt-risk-common.module.ts:

@NgModule({
    declarations: [
        ScenariosGraphComponent
    ],
    entryComponents: [
        ScenariosGraphComponent
    ],
    exports: [
        ScenariosGraphComponent
    ],
    schemas: [CUSTOM_ELEMENTS_SCHEMA]
})
export class RegMktRiskCommonModule { }

reg-mkt-risk-home.module.ts:

@NgModule({
    declarations: [
        RegulatoryMarketRiskHomeComponent,
        OverviewGridComponent // <-- component who actually show ScenariosGraphComponent in a modal
    ],
    exports: [
        RegulatoryMarketRiskHomeComponent
    ],
    imports: [
        // ...,
        RegMktRiskCommonModule
    ],
    providers: [
        // ...
    ]
})
export class RegMktRiskHomeModule { }

这是实际的错误消息:

ERROR Error: No component factory found for ScenariosGraphComponent. Did you add it to @NgModule.entryComponents?
    at noComponentFactoryError (core.js:9659)
    at CodegenComponentFactoryResolver.push../node_modules/@angular/core/fesm5/core.js.CodegenComponentFactoryResolver.resolveComponentFactory (core.js:9697)
    at ComponentLoader.push../node_modules/ngx-bootstrap/component-loader/fesm5/ngx-bootstrap-component-loader.js.ComponentLoader._getContentRef (ngx-bootstrap-component-loader.js:411)
    at ComponentLoader.push../node_modules/ngx-bootstrap/component-loader/fesm5/ngx-bootstrap-component-loader.js.ComponentLoader.show (ngx-bootstrap-component-loader.js:152)
    at BsModalService.push../node_modules/ngx-bootstrap/modal/fesm5/ngx-bootstrap-modal.js.BsModalService._showModal (ngx-bootstrap-modal.js:927)
    at BsModalService.push../node_modules/ngx-bootstrap/modal/fesm5/ngx-bootstrap-modal.js.BsModalService.show (ngx-bootstrap-modal.js:853)
    at Object.action (overview-grid.options.ts:48)
    at MenuItemComponent.push../node_modules/ag-grid-enterprise/dist/lib/menu/menuItemComponent.js.MenuItemComponent.onOptionSelected (menuItemComponent.js:102)
    at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:421)
    at Object.onInvokeTask (core.js:16147)

最佳答案

也许您忘记在打开对话框的组件的模块中导入MatDialogModule。在这种情况下 Angular 生成的错误可能会产生误导。

关于javascript - 尽管我的组件已在我的模块的 entryComponents 选项中声明,但 Angular 如何找不到该组件的组件工厂?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57475868/

相关文章:

angular - 无法绑定(bind)到 'dataSource',因为它不是 'table' 的已知属性

Angular 2 形式 "Cannot find control with path"

TypeScript 多个文件相同的命名空间

angular - 当使用 filter(Boolean) 运算符时,类型 'unknown' 不可分配给类型 'string'

javascript - 在 ViewData 中使用选择列表填充下拉列表

javascript - 从 Javascript 代码中删除鼠标控件

dependency-injection - 从 Angular2 中的子组件访问父组件数据/属性

javascript - editablegrid 设置用于渲染条形图的列

javascript - 使用本地存储javascript点击刷新页面上的元素切换

angular - 我可以使用自定义 ReflectiveInjector 策略来获取组件提供者吗?