有没有办法在静态类方法中引用 Bootstrap 提供的服务?
目前没有任何代码,但我一直在尝试使用 Injector
的标准/样板语法 like here .当我 resolveAndCreate()
服务(也尝试了其他 Injector 方法...)时,会创建新实例并覆盖引导实例。
预期用例是 @CanActivate()
装饰器。我一直在做糟糕的解决方法(-:在服务准备好时设置 window["__ready__"]
并在装饰器中使用它...
最佳答案
一个解决方案是在专用单例中存储对在 Bootstrap 中创建的注入(inject)器的引用。
bootstrap(App, [Auth, ROUTER_PROVIDERS])
.then((appRef: ComponentRef) => {
// store a reference to the injector
appInjector(appRef.injector);
});
单例如下:
let appInjectorRef: Injector;
export const appInjector = (injector?: Injector):Injector => {
if (injector) {
appInjectorRef = injector;
}
return appInjectorRef;
};
然后你就可以访问服务了:
let injector: Injector = appInjector(); // get the stored reference to the injector
let auth: Auth = injector.get(Auth); //get the service from the injector
这是一个 Plunker,您可以在其中看到它的实际效果。 (我不是 plunker 的作者,但这对我真的很有帮助):http://plnkr.co/edit/SF8gsYN1SvmUbkosHjqQ?p=preview
关于typescript - 如何在静态类方法中引用提供者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35451819/