Angular懒加载场景导入ReactiveFormsModule仍报formGroup未知错误
问题根因
你的懒加载路由配置写错了,这是报错的核心原因,和你有没有导入ReactiveFormsModule没有直接关系。
你当前的懒加载逻辑直接加载了SessionRoutingModule,没有加载声明LoginComponent的SessionModule:
// 错误写法 loadChildren: () => import('./session/session-routing.module').then((m) => m.SessionRoutingModule)
Angular对懒加载模块的编译是独立作用域的,你单独加载路由模块时,LoginComponent的编译上下文里根本不会加载SessionModule导入的GlobalModule、ReactiveFormsModule等依赖,自然识别不到formGroup指令。
至于IDE能正常跳转formGroup的定义,是因为Angular语言服务会全局扫描项目依赖,不代表编译时的模块作用域配置正确。
修复方案
- 修改根路由的懒加载配置,指向声明组件的特性模块
SessionModule,而非单独的路由模块:
const routes: Routes = [ { path: 'Session', loadChildren: () => import('./session/session.module').then((m) => m.SessionModule) } ];
- 补全
SessionModule的导入项,你当前的SessionModule没有导入对应的路由模块,需要加上:
@NgModule({ declarations: [LoginComponent], imports: [GlobalModule, SessionRoutingModule] }) export class SessionModule {}
- 修正
GlobalModule的错误配置:BrowserModule只能在根模块AppModule中导入一次,不能放在共享模块中导出,否则懒加载场景下会触发额外的模块重复导入错误。把GlobalModule的exports数组里的BrowserModule移除,仅在AppModule的imports数组中保留BrowserModule即可,特性模块需要的浏览器通用能力用CommonModule提供就足够。
改完之后重新执行编译命令,错误就会消失。你之前尝试在SessionModule里直接加ReactiveFormsModule不生效,本质是因为路由根本没加载到这个模块,配置再多导入项也不会生效。
内容的提问来源于stack exchange,提问作者Wouter Vandenputte
相关产品推荐
相关产品推荐

