能否在app.module.ts之外的模块配置NgRx的forRoot根状态?
能否在懒加载模块中配置NgRx独立根状态?
答案是完全可以,你不需要在app.module.ts层面配置全应用级的NgRx根状态,完全可以由懒加载的other.module.ts作为根状态配置入口,维护其下属子模块的专属独立状态。
核心原理
NgRx的StoreModule.forRoot()的核心作用是在当前注入器范围内注册Store服务、根reducer、运行时中间件等核心依赖,官方只要求「同一注入器范围内有且仅有一次forRoot()调用」,并没有强制要求必须在根模块AppModule中调用。
懒加载的other.module.ts会被Angular创建独立的子注入器,你在该模块中调用StoreModule.forRoot()生成的Store实例只会作用在other.module及其所有子模块的范围内,和应用其他部分的状态完全隔离,可以作为这个模块树的专属根状态使用,下属子模块正常通过StoreModule.forFeature()挂载feature状态即可。
命令合法性验证
你提到的CLI命令是完全合法可用的:
ng generate @ngrx/schematics:store State --root --module other.module.ts
执行后CLI会自动在other.module.ts的imports数组中生成对应的StoreModule.forRoot()配置,不会修改app.module.ts的代码。
注意事项
- 如果你在多个懒加载模块中分别调用
StoreModule.forRoot(),会生成多个互相隔离的Store实例,不同模块树的状态无法互相访问,需要提前确认这种隔离性符合你的业务设计预期。 - 如果存在需要跨多个模块树访问的全局状态(比如用户登录态、全局配置等),更建议在AppModule中统一配置根状态,避免重复维护通用状态。
内容的提问来源于stack exchange,提问作者MoMo
相关产品推荐
相关产品推荐

