使用全局注入器的Angular 7组件继承

时间:2018-11-07 07:38:33

标签: angular typescript inheritance angular7

我一直在使用MSDN blog post中描述的方法来简化扩展组件,而无需在super()调用中提供所有依赖项。但是,此操作已停止在Type 7的Angular 7中使用。

所以发生的是,在引导之后,我试图将注入器存储在服务中,然后再尝试检索它。

platformBrowserDynamic().bootstrapModule(AppModule).then(ref => {
  // Store module's injector in the AppInjector class
  console.log('Expected #1: storing app injector');
  AppInjector.setInjector(ref.injector);
})

然后在基本组件中获取存储的注射器

export class BaseComponent {
  constructor() {
    console.log('Expected #2: retrieving stored injector');
    const injector = AppInjector.getInjector();
  }
}

但是,从控制台看,顺序是相反的-首先调用BaseComponent的构造函数,然后解决boostrapModule()的承诺。

由于控制台日志提示,我不确定Angular 7中的引导行为现在是否有所不同。以前与Typescript 2一起在Angular 6中使用的解决方案相同,但在版本7中已停止工作。这是基于MSDN文章的已损坏应用程序的快速发布:https://stackblitz.com/edit/component-inheritance-angular-7

因此,基本问题是– 如何保证AppInjector.setInjector()AppInjector.getInjector()之前发生

1 个答案:

答案 0 :(得分:4)

我已经在AppModule中设置了注入器服务,这意味着我将注入Injector并将其设置在AppModule的承包商中,并将注入器服务存储在全局对象中

export class AppModule { 
  constructor(injector:Injector){
  // Store module's injector in the AppInjector class
  console.log('Expected #1: storing app injector');
  AppInjector.setInjector(injector);
  }
}

demo