Angular中子模块导入管道触发栈溢出错误求助
解决Angular全局管道导致的栈溢出错误
问题根源
你在AppModule里已经声明了SomePipe,又在懒加载的ChildModule的imports数组里直接导入了这个管道类。Angular里,管道属于声明类,只能在一个模块的declarations里声明,要在其他模块使用的话,得通过共享模块导出,直接把管道类塞imports会触发模块解析循环,导致栈溢出。
正确实现全局可用管道的步骤
1. 创建共享管道模块(推荐做法)
要让管道全局能用,最规范的是搞个共享模块,专门存放要全局使用的管道、指令、组件:
// src/pipes/shared.pipe.module.ts import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { SomePipe } from './some.pipe'; @NgModule({ declarations: [SomePipe], exports: [SomePipe], // 必须导出,其他模块才能调用 imports: [CommonModule] }) export class SharedPipeModule { }
2. 修改AppModule和ChildModule
- AppModule:移除
declarations中的SomePipe,改为导入共享模块:
// app.module.ts (...) import { SharedPipeModule } from './pipes/shared.pipe.module'; @NgModule({ declarations: [ AppComponent, NotFoundComponent ], imports: [ BrowserModule, AppRoutingModule, SharedPipeModule, // 导入共享模块 HttpClientModule ], providers: [], bootstrap: [AppComponent] }) export class AppModule { }
- ChildModule:移除
imports中的SomePipe,改为导入共享模块:
// child.module.ts (...) import { SharedPipeModule } from '../pipes/shared.pipe.module'; // 注意路径匹配你的项目结构 const routes: Routes = [ { path: 'stuff/:id', component: StuffComponent }, { path: '', component: MainThingsComponent } ]; @NgModule({ declarations: [ MainThingsChildComponent1, MainThingsChildComponent2, StuffComponent, MainThingsComponent ], imports: [ CommonModule, FormsModule, ReactiveFormsModule, RouterModule.forChild(routes), SharedPipeModule // 导入共享模块 ], providers: [ SomeService ] }) export class ChildModule {}
3. 关于路由问题的额外说明
你之前碰到的**路由导致子组件跳404的问题,和这次的栈溢出错误无关,后续要处理的话可以把404组件放到独立模块里,但当前先搞定管道问题就行。
内容的提问来源于stack exchange,提问作者TTT
相关产品推荐
相关产品推荐

