我使用的是带有webpack的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

我该怎么解决呢?


当前回答

如果您仍然没有解决这个问题-像我一样-这是导致我这个错误的原因。正如@jkyoutsey所建议的,我确实在尝试创建一个模态组件。根据他的建议,我花了相当多的时间将我的组件移动到一个服务并将其注入到页面组件中。还将providedIn: 'root'更改为MyModule,当然必须至少向上移动一级以避免循环引用。我不确定这些是否真的有必要。

最终解决8个小时难题的是在我的组件中不实现ngOnInit。我盲目地实现了ngOnInit,即使函数是空的。我倾向于那样做。这可能是一个不好的做法。

无论如何,如果有人能解释为什么空的ngOnInit会导致这个错误,我很乐意阅读评论。

其他回答

如果您仍然没有解决这个问题-像我一样-这是导致我这个错误的原因。正如@jkyoutsey所建议的,我确实在尝试创建一个模态组件。根据他的建议,我花了相当多的时间将我的组件移动到一个服务并将其注入到页面组件中。还将providedIn: 'root'更改为MyModule,当然必须至少向上移动一级以避免循环引用。我不确定这些是否真的有必要。

最终解决8个小时难题的是在我的组件中不实现ngOnInit。我盲目地实现了ngOnInit,即使函数是空的。我倾向于那样做。这可能是一个不好的做法。

无论如何,如果有人能解释为什么空的ngOnInit会导致这个错误,我很乐意阅读评论。

我在Angular7中创建动态组件时也遇到了同样的问题。有两个组件(TreatListComponent, MyTreatComponent)需要动态加载。我只是在我的app.module.ts文件中添加了entryComponents数组。

    entryComponents: [
    TreatListComponent,
    MyTreatComponent
  ],

你应该像这样在模块中导入NgbModule:

@NgModule ({ 声明:[ AboutModalComponent ], 进口:[ CommonModule, SharedModule, RouterModule, FormsModule, ReactiveFormsModule, NgxLoadingModule, NgbDatepickerModule, NgbModule ], entryComponents (AboutModalComponent): }) 导出类HomeModule {}

在我的情况下,我解决了这个问题: 1)将NgxMaterialTimepickerModule放在app模块导入中:[] 2)在testmodule中放置NgxMaterialTimepickerModule。Ts导入:[] 3)将testcomponent放在声明中:[]和entryComponents:[]

(我使用的是angular 8+版本)

此错误发生在您尝试动态加载组件时,并且:

要加载的组件不是路由模块 该组件在模块entryComponents中为no。

在routingModule

const routes: Routes = [{ path: 'confirm-component', component: ConfirmComponent,data: {}}]

或者在模块中

entryComponents: [
ConfirmComponent
} 

要修复此错误,您可以将路由器添加到组件或添加到模块的entryComponents中。

添加路由器到组件。这种方法的缺点是你的 组件将通过该url访问。 将其添加到entryComponents中。在这种情况下,您的组件将没有附加任何url,它将无法通过url访问。