如何从Angular组件获取环境作为“库”?

时间:2019-06-06 07:50:42

标签: javascript angular angular-library

我正在创建Angular Library,但是在环境方面存在一些问题。 我生成了一个应用程序(父级)和库(子级)。 如何从库中定义的子组件中获取环境(在父下定义)。

我生成了这样的应用。

ng version
# Angular CLI: 8.0.1
# Node: 10.15.3
# OS: darwin x64
# Angular: 8.0.0
ng new app-parent
cd app-parent
ng generate library lib-child

像这样的项目结构。

$ tree -L 2
.
├── README.md
├── angular.json
├── browserslist
├── e2e
│   ├── protractor.conf.js
│   ├── src
│   └── tsconfig.json
├── karma.conf.js
├── package.json
├── projects
│   └── lib-child # <- wanna get environment from here!!
├── src
│   ├── app
│   ├── assets
│   ├── environments
│   ├── favicon.ico
│   ├── index.html
│   ├── main.ts
│   ├── polyfills.ts
│   ├── styles.sass
│   └── test.ts
├── tsconfig.app.json
├── tsconfig.json
├── tsconfig.spec.json
├── tslint.json
└── yarn.lock

我尝试将导入作为相对路径,例如... import { environment } from '../../../src/environment'; 但是此解决方案不能使用其他应用程序。 图书馆应使用一些环境和应用程序。 我正在找到一种喜欢的方式。

import { environment } from '@angular/core';

environment.production #=> true/false

1 个答案:

答案 0 :(得分:2)

我认为将环境传递给辅助项目不是一个好习惯,

相反,通过在项目的模块上创建静态方法,尝试将其传递通过主应用程序:

import { environment } from '../../../src/environment';    
...

@NgModule({
  imports: [
    BrowserModule,
    MyProjectModule.forRoot({
      environment: environment
    }),
    ...
 ]})

并在项目模块中:

export class MyProjectModule {
  static forRoot(environment): ModuleWithProviders {
    // User envirnment here or decalare an injection token for the environment
    console.log(environment);
    return {
      ngModule: SampleModule,
      providers: [{provide: 'environment', useValue: environment}]
    };
  }
}