我使用angualr2 2-库yeoman生成器创建了公司内部库。
一些角服务在当前应用程序中使用环境变量(api端点在每个env上被更改)。我想知道将当前环境对象传递给angular2库服务的最佳方法是什么?
发布于 2019-09-03 05:05:19
我认为这里有一个更好的方法
我想你们会发现这很有用:使用抽象类作为可交换行为的依赖注入标记。
我有3个角度应用程序在一个Nx项目,共享一些共同的环境变量。一个公共网站,一个私人门户和一个管理应用程序。在我的库中,我使用了一个定义公共环境变量的抽象环境类。
export abstract class Environment {
abstract readonly production: boolean;
abstract readonly appUrls: {
readonly public: string;
readonly portal: string;
readonly admin: string;
};
}然后,我将3个environment.ts文件修改如下。
import { Environment } from '@my-lib-prefix/common';
class EnvironmentImpl implements Environment {
production = false;
appUrls = {
public: 'http://localhost:4200',
portal: 'http://localhost:4201',
admin: 'http://localhost:4202'
};
}environment = environment.prod.ts ();当然,environment.prod.ts与environment.ts是对称的。然后,在根app.module.ts中为每个角度应用程序提供各自的环境依赖关系。
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import { Environment } from '@my-lib-prefix/common';
import { environment } from '../environments/environment';
@NgModule({
declarations: [AppComponent],
imports: [BrowserModule],
providers: [{ provide: Environment, useValue: environment }],
bootstrap: [AppComponent]
})
export class AppModule {}现在,任何组件都可以以干净、通用的方式注入环境依赖项。
import { Component } from '@angular/core';
import { Environment } from '@my-lib-prefix/common';
@Component({
selector: 'my-login',
templateUrl: './my-login.component.html'
})
export class MyLoginComponent {
constructor(private env: Environment) {}
}它强制每个environment.ts实现抽象类中定义的“公共”环境变量。另外,每个EnvironmentImpl都可以使用各自特定于应用程序的特定环境变量进行扩展。这种方法似乎非常灵活和干净。干杯!^_^
https://stackoverflow.com/questions/43529920
复制相似问题