Angular 角度8:错误:未找到组件工厂
我在同一个ts文件中创建了两个组件,如下所示。引用的示例代码,它使用相同的方法Angular 角度8:错误:未找到组件工厂,angular,Angular,我在同一个ts文件中创建了两个组件,如下所示。引用的示例代码,它使用相同的方法 import { Component, OnInit, Inject } from '@angular/core'; import { MatDialogModule, MatDialog, MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; @Component({ selector: 'app-srapi', templat
import { Component, OnInit, Inject } from '@angular/core';
import { MatDialogModule, MatDialog, MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
@Component({
selector: 'app-srapi',
templateUrl: './srapi.component.html',
styleUrls: ['./srapi.component.scss']
})
export class SrapiComponent {
constructor(private dialog: MatDialog) { }
onCreate(): void {
const dialogRef = this.dialog.open(SrapiTFLFormComponent);
}
}
@Component({
selector: 'app-srapi-tfl-form',
templateUrl: './srapi-tfl-form.html'
})
export class SrapiTFLFormComponent{
constructor(public dialogRef: MatDialogRef<SrapiTFLFormComponent>) {}
}
但是当它打开对话框时会出现错误
错误:找不到SrapiTFLFormComponent的组件工厂。您是否将其添加到@NgModule.entryComponents?
at-noComponentFactoryError(core.js:15705)
在app.module.ts中,在EntryComponent数组中添加
SrapiTFLFormComponent
:
使用此组件作为对话框打开时,必须将其添加到EntryComponents数组中:
条目组件是按类型强制进行角度加载的任何组件(这意味着您没有在模板中引用它)。通过在NgModule中引导条目组件或将其包含在路由定义中来指定条目组件
比如:
在您的
app.module.ts
中添加以下代码:
import { SrapiComponent, SrapiTFLFormComponent } from './srapi/srapi.component';
@NgModule({
declarations: [
AppComponent,
LoginComponent,
HeaderComponent,
FooterComponent,
RegisterComponent,
EdcUserFormComponent,
SidebarComponent,
EdcMasterDataComponent,
SrapiComponent,
SrapiTFLFormComponent
],
imports: [
BrowserModule,
.
.
],
entryComponents: [
SrapiTFLFormComponent
]
正如错误所说,您还需要在entryComponents内部添加组件
@NgModule({
declarations: [
AppComponent,
LoginComponent,
HeaderComponent,
FooterComponent,
RegisterComponent,
EdcUserFormComponent,
SidebarComponent,
EdcMasterDataComponent,
SrapiComponent,
SrapiTFLFormComponent
],
imports: [
BrowserModule,
...
],
entryComponents: [SrapiTFLFormComponent]
...
要弄清楚entryComponents是什么,您可以看一下
入口构件是任何必须承受角荷载的构件,
(这意味着您没有在模板中引用它),按类型。你
通过在NgModule中引导来指定入口组件,或
将其包含在路由定义中
我面临的问题是“错误:没有找到用于搜索食品成分的成分工厂。您是否将其添加到@NgModule.entryComponents?”如下图所示
简单解决方法:您需要将SearchFoodModalComponent添加到@NgModule的entrycomponents中
只需添加
SrapiTFLFormComponent
就可以了,不需要添加SrapiComponent
:)我不能对stackoverflowentryComponents有时间限制,虽然我不知道它是什么,但对我来说这是一个解决方案does@HrvojeT动态创建组件时,可以在entryComponents
数组中指定组件(例如,从.ts文件中)而不是在模板中使用选择器。对于Angular 9(使用Ivy),这些都是不推荐使用的,不需要添加到entryComponents数组中。
import { SrapiComponent, SrapiTFLFormComponent } from './srapi/srapi.component';
@NgModule({
declarations: [
AppComponent,
LoginComponent,
HeaderComponent,
FooterComponent,
RegisterComponent,
EdcUserFormComponent,
SidebarComponent,
EdcMasterDataComponent,
SrapiComponent,
SrapiTFLFormComponent
],
imports: [
BrowserModule,
.
.
],
entryComponents: [
SrapiTFLFormComponent
]
@NgModule({
declarations: [
AppComponent,
LoginComponent,
HeaderComponent,
FooterComponent,
RegisterComponent,
EdcUserFormComponent,
SidebarComponent,
EdcMasterDataComponent,
SrapiComponent,
SrapiTFLFormComponent
],
imports: [
BrowserModule,
...
],
entryComponents: [SrapiTFLFormComponent]
...
import { NgModule } from '@angular/core';
import { SearchFoodModalComponent } from "../../modals//searchFood/searchFood.component";
import { InboundComponent } from './inbound/inbound.component'
@NgModule({
declarations: [InboundComponent,SearchFoodModalComponent],
imports: [
],
exports: [
RouterModule
],
providers: [InboundService],
entryComponents: [SearchFoodModalComponent]
})
export class InBoundFormModule {
}