Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度8:错误:未找到组件工厂_Angular - Fatal编程技术网

Angular 角度8:错误:未找到组件工厂

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

我在同一个ts文件中创建了两个组件,如下所示。引用的示例代码,它使用相同的方法

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 {
}