将数据从角度应用传递到角度库

时间:2019-10-16 16:08:36

标签: angular angular8 angular-library

我需要能够将一些数据(配置)从angular应用程序传递到angular库。要求是该配置需要在库的NgModule的 decorator 中可以访问,因此我可以有条件地导入一些模块。例如:

@NgModule({
    imports: [
        !envService.data.production ? StoreDevtoolsModule.instrument() : [],
    ]
})
export class LibrarysModule { }

我找不到与此相关的任何文档,并且在github上没有找到任何明确的答案。角8有可靠的方法吗?

在堆栈溢出时,有几个类似的答案,但是都不适合我的用例(请参阅:passing environment variables to angular2 library)。它们全部说明了如何使用forRoot()以便将配置传递给库的任何服务或组件。但是,我需要在库模块的装饰器中进行配置。

1 个答案:

答案 0 :(得分:0)

您可以在引导时传递外部数据。

在main.ts中,

import { browserDynamicPlatform } from '@angular/platform-browser-dynamic';
import { wrappedAppModule } from './app.module';

export function main(myValue: boolean) {
  browserDynamicPlatform().bootstrapModule(wrappedAppModule (myValue));
}

您可以像这样包装ngModule。

import { NgModule }      from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';

export function wrappedAppModule (myValue) {
  @NgModule({
    imports: [
        !myValue ? StoreDevtoolsModule.instrument() : [],
    ]
  })
  class AppModule { }

  return AppModule;
}

在您的index.html中,

<script>
  System.import('app')
    .then(module => module.main(envService.data.production),
       console.error.bind(console)
    );
</script>

希望这会有所帮助。