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
相关产品推荐
相关产品推荐

