代码之家  ›  专栏  ›  技术社区  ›  Matthew Campbell

角度静态提供程序引导不重写应用程序根提供程序

  •  1
  • Matthew Campbell  · 技术社区  · 6 年前

    使用角度6.0.3

    具有导入到根应用程序模块的第三方Azure Adal包装:

    @NgModule({
      imports: [
      ....
      <3rd party module>.forRoot(<configuration object here>)
      ....
      ]
    })
    export class AppModule {} 
    

    [第三方模块定义]

    @NgModule()
    export class <3rd party module> {
      static forRoot(@Inject(<thing to override>) config): ModuleWithProviders {
        return {
          ngModule: <3rd party module>,
          providers: [ 
            ... 
            { provide: <thing to override>, useValue: config } 
            ... 
          ]
        }
      };
    }
    

    传递给的配置 forRoot 用作 useValue 提供程序的参数。我想我可以在模块引导期间覆盖提供的对象:

    <fetch configuration form server>
    .then(json => 
      platformBrowserDynamic(
        [ { provide: <thing to override>, useJson: json } ]
      )
      .boostrapModule(AppModule)
    );
    

    但是,静态提供程序必须早于冒泡顺序,以便以角度解析提供程序,因为提供的对象始终是在应用程序级别传递到ngmodule decorator中的派生配置对象(即在静态提供程序中使用的对象 前根 呼叫)。

    尝试分叉第三方库添加 多种 提供指令,并让从属项吞入数组。但这似乎也不管用。完全忽略引导时来自静态提供程序的provide指令(即从未添加到多数组)。

    有什么想法吗?

    0 回复  |  直到 6 年前
    推荐文章