如果您仍在寻找解决方案,以下是我如何完成与您所要求的类似的事情(使用 Angular 4.2.4)。
In your AppModule
(或者你想要导入库的地方),调用forRoot()
方法对你的LibraryModule
。借助此函数,您可以将任何配置值传递给您的库,例如您的应用程序的环境。
import {environment} from "../environments/environment";
...
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
...
LibraryModule.forRoot(environment)
],
bootstrap: [AppComponent]
})
export class AppModule {
}
You LibraryModule
当然需要提供forRoot()
方法。
在providers数组中你可以提供服务、值and more https://angular.io/guide/dependency-injection#injector-providers。在这种情况下,'env'
为了简单起见,充当持有给定环境对象的令牌。您还可以使用注入令牌 https://angular.io/guide/dependency-injection#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());
}
}