将环境变量传递给angular2库

我使用angualr2-library yeoman generator创建了公司内部库。

一些角度服务正在我们当前的应用程序中使用环境变量(每个env都会更改api端点)。 我想知道将当前环境对象传递给angular2库服务的最佳方式是什么?


如果你仍然在寻找一个解决方案,这里是我如何完成了你所要求的东西(使用Angular 4.2.4)。

在您的AppModule (或者您想要导入库的地方)中,调用LibraryModule上的forRoot()方法。 借助此功能,您可以将任何配置值传递给您的库,例如您的应用程序的环境。

import {environment} from "../environments/environment";
...

@NgModule({
    declarations: [
        AppComponent
    ],
    imports: [
        BrowserModule,
        ...
        LibraryModule.forRoot(environment)
    ],
    bootstrap: [AppComponent]
})
export class AppModule {
}

LibraryModule当然需要提供forRoot()方法。 在提供者数组中,您可以提供服务,值等。 在这种情况下,为了简单起见, 'env'充当给定环境对象的标记。 您也可以使用InjectionToken。

@NgModule({
    ...
})
export class LibraryModule {

    public static forRoot(environment: any): ModuleWithProviders {

        return {
            ngModule: LibraryModule,
            providers: [
                ImageService,
                {
                    provide: 'env', // you can also use InjectionToken
                    useValue: environment
                }
            ]
        };
    }
}

由于令牌env现在由您提供的LibraryModule ,你可以在所有的其子服务或组件注入它。

@Injectable()
export class ImageService {

    constructor(private http: Http, @Inject('env') private env) {
    }

    load(): Observable<any> {
        // assume apiUrl exists in you app's environment:
        return this.http.get(`${this.env.apiUrl}/images`)
            .map(res => res.json());
    }

}

我希望这有助于!

链接地址: http://www.djcxy.com/p/96023.html

上一篇: passing environment variables to angular2 library

下一篇: Get the ref present in child component in the parent component