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

如何在路由变更后保持Angular Service为同一实例以维持其状态?

问题排查方向
  • 检查路由中的懒加载模块配置:如果路由使用loadChildren加载懒模块,且该懒加载模块的providers数组中重复注册了DataService,懒模块的子注入器会生成独立的Service实例,每次进入对应路由都会触发实例重建。
  • 检查路由对应组件的providers配置:若路由绑定的组件在@Component装饰器的providers数组中单独注册了DataService,该实例会随组件生命周期销毁重建,路由切换组件销毁时Service实例也会被清除。
  • 检查独立组件的注册逻辑:如果你使用Angular 14+的独立组件特性,需要确认路由对应的独立组件没有在自身的providers或imports中重复声明DataService,否则也会生成独立实例。
单实例Service实现方案

你可以直接调整DataService的@Injectable装饰器配置,使用providedIn: 'root'声明为根注入器提供,无需在AppModule的providers数组中注册,即可默认全局单例,只要应用不刷新,路由切换不会销毁实例:

@Injectable({
  providedIn: 'root'
})
export class DataService {
  content: string = 'Intial Value';

  constructor() {
    console.log('DataService::constructor()');
  }
}
状态管理方案说明

使用全局单例Service作为有状态数据管理器是Angular官方支持的合法方案,非常适合小型项目、简单状态共享场景。
如果是中大型项目,状态逻辑复杂、需要跨多模块/多组件同步状态、需要状态持久化/调试能力,官方推荐使用NgRx作为状态管理方案,它是Angular官方维护的Redux架构实现,内置状态管理、副作用处理、数据持久化等标准化能力。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:06:02