typescript - 如何在静态类方法中引用提供者?

标签 typescript angular

有没有办法在静态类方法中引用 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/

相关文章:

typescript - AWS SecretsManager 值无法解析

typescript - 修改类型以包含对象的静态值而不是它们的派生类型({ test : 3 } instead of { test: number })

javascript - Angular 与 TypeScript - 如何在可观察回调中处理业务逻辑?

angular - Summernote 文本区域的输入字段文本验证失败

javascript - 单击保存时 Angular Material 对话框传递动态功能

javascript - 如何更改时间格式?

angular - 将超链接添加到 Angular 2 Toast 消息

node.js - Angular2 内部的 Node 和 Electron 模块

javascript - Prettier 和 eslint 缩进不一起工作

javascript - 在 Typescript 中向创建的 Redux Store 添加属性