如何在静态类方法中引用提供程序?

时间:2016-02-17 08:52:20

标签: typescript angular

有没有办法引用静态类方法中bootstrap提供的服务?

目前没有任何代码,但我一直在尝试Injector like here的标准/样板语法。当我resolveAndCreate()一个服务(尝试过其他的Injector方法......)时,会创建一个新实例并覆盖bootstraped实例。

预期用例是@CanActivate()装饰器。我一直在做一些糟糕的解决方法( - :在服务准备就绪时设置window["__ready__"]并在装饰器中使用它...

1 个答案:

答案 0 :(得分:4)

一种解决方案是在专用单例中存储在引导程序中创建的注入器的引用。

...
data: {
       'pdf001': 'pdf001',
       'attendee_id':'<?php print $attendee_id;?>',
       'graph':'<?php print addslashes(preg_replace("/[\n\r]/i", "", $output));?>'
},
...

单身人士如下:

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;
};

这是一个Plunker,您可以在其中看到这一点。 (我不是掠夺者的作者,但这对我很有帮助):http://plnkr.co/edit/SF8gsYN1SvmUbkosHjqQ?p=preview