向@CanActivate 注入应用程序级服务

Inject an application level Service to @CanActivate

我想实现与 Angular1.x 路由 "resolve" 类似的功能,方法是使用 @CanActivate 路由生命周期事件。

作为允许路由通过的触发器,我想使用在应用程序 bootstrap 中定义的服务(这使其成为一个应用程序范围的实例)。

bootstrap(AppComponent, [ ROUTER_PROVIDERS, TestObjectModel ])

我认为我可以在该生命周期事件中使用依赖项的唯一方法是使用以下内容:

const injector = Injector.resolveAndCreate([TestObjectModel]); const testObjectModel = injector.get(TestObjectModel);

这确实让我得到了一个服务实例,但是是一个新实例(不是应用程序范围内使用的实例)。

我也试过Injector.fromResolvedProviders,但没有更好的结果。

有什么方法可以得到组件内的根 Injector 吗?

我在以下位置找到了此解决方法:http://embed.plnkr.co/SF8gsYN1SvmUbkosHjqQ/

它有效并允许我在生命周期挂钩中获取单个服务实例。