【发布时间】:2016-04-25 22:01:47
【问题描述】:
当使用分层注入时,非根注入器中提供的依赖项的生命周期是多少?
上下文:
我的 Angular 2 应用由几个部分组成。在根组件中有一个@RouteConfig,其中包含到组件A、B 和C 的路由。组件B 有一个子部分@RouteConfig 到子部分x 和y。
/A
/B
/x
/y
/C
组件x 需要服务q。按照J. Papa's Angular 2 style guide 的建议,我在组件x 级别向注入器提供了服务,即
@xComponent({
providers: [q]
})
export class xComponent { ... }
Service q 在内部请求并缓存一些数据。我的印象是服务是单例的,在随后访问/B/x 时,数据将从缓存中获得。但是,通过上述设置,每次用户打开/B/x 部分时,都会再次请求数据。我在服务q 的构造函数中放置了一个console.log("creating q"),并看到每当访问/B/x 时都会创建一个新的服务实例。
如果我在组件/B 级别提供服务,则在/B/x 和/B/y 之间导航时会缓存该值,但在导航到/A 或/C 时会丢失。
似乎只要组件被销毁,注入器就会被销毁。这是预期的行为吗?
配置应用程序以使服务不会被重新创建的正确方法是什么?显然我可以在根组件级别提供服务,但也许我遗漏了什么?
【问题讨论】: