You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular 11升级至17.3.8后entryComponents属性报错求助

Angular 11升级到17.3.8后entryComponents报错的解决方法

问题原因

Angular 9引入Ivy编译器后,已不再需要手动通过entryComponents声明动态组件——Ivy会自动检测所有需要动态创建的组件。到Angular 13版本,entryComponents属性已从@NgModule的配置中完全移除,因此在Angular 17中使用该属性会直接触发错误。

解决步骤

  • 删除entryComponents配置:直接移除@NgModule中的entryComponents字段
  • 清理无用常量:如果ENTRY_COMPONENTS常量没有在其他地方被引用,可以直接删除它
  • 确认组件声明:确保所有动态组件都已在declarations数组中注册(你的代码中已满足此要求,所有入口组件都包含在COMPONENTS常量并导入到declarations中)

修改后的代码示例

import { NgModule } from '@angular/core';
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
import { CommonModule } from '@angular/common';
import { Ng2SmartTableModule } from 'ng2-smart-table';
import { ThemeModule } from '../../@theme/theme.module';
import { FormsModule } from '@angular/forms';
import { UsersComponent } from './users.component';
import { NbCardModule, NbButtonModule, NbSelectModule, NbInputModule, NbSpinnerModule } from '@nebular/theme';
import { AddUserComponent } from './add-user/add-user.component';
import { EditUserComponent } from './edit-user/edit-user.component';
import { DeleteUserComponent } from './delete-user/delete-user.component';

const COMPONENTS = [
  UsersComponent,
  AddUserComponent,
  EditUserComponent,
  DeleteUserComponent,
];

const MODULES = [
  CommonModule,
  ThemeModule,
  NgbModule,
  NbButtonModule,
  NbSelectModule,
  NbInputModule,
  NbCardModule,
  Ng2SmartTableModule,
  FormsModule,
  NbSpinnerModule
];

@NgModule({
  imports: [...MODULES],
  declarations: [...COMPONENTS]
})
export class UsersModule { }

额外提示

项目中所有其他使用entryComponents的模块,都需要执行同样的删除操作。Ivy编译器会自动处理动态组件的识别和实例化,无需任何额外配置。

内容的提问来源于stack exchange,提问作者Priya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 15:17:42