使用 forRoot 传递配置数据
Pass config data using forRoot
我正在尝试将配置数据传递到 Angular 中的自定义库中。
在用户应用程序中,他们将使用forRoot
将一些配置数据传递到我的库
// Import custom library
import { SampleModule, SampleService } from 'custom-library';
...
// User provides their config
const CustomConfig = {
url: 'some_value',
key: 'some_value',
secret: 'some_value',
API: 'some_value'
version: 'some_value'
};
@NgModule({
declarations: [...],
imports: [
// User config passed in here
SampleModule.forRoot(CustomConfig),
...
],
providers: [
SampleService
]
})
export class AppModule {}
在我的自定义库中,特别是 index.ts
,我可以访问配置数据:
import { NgModule, ModuleWithProviders } from '@angular/core';
import { SampleService } from './src/sample.service';
...
@NgModule({
imports: [
CommonModule
],
declarations: [...],
exports: [...]
})
export class SampleModule {
static forRoot(config: CustomConfig): ModuleWithProviders {
// User config get logged here
console.log(config);
return {
ngModule: SampleModule,
providers: [SampleService]
};
}
}
我的问题是如何在自定义库的 SampleService
中提供配置数据
目前 SampleService
包含以下内容:
@Injectable()
export class SampleService {
foo: any;
constructor() {
this.foo = ThirdParyAPI(/* I need the config object here */);
}
Fetch(itemType:string): Promise<any> {
return this.foo.get(itemType);
}
}
我已经通读了 Providers 上的文档,但是 forRoot
示例非常简单,似乎没有涵盖我的用例。
您就快完成了,只需在您的模块中同时提供 SampleService
和 config
,如下所示:
export class SampleModule {
static forRoot(config: CustomConfig): ModuleWithProviders<SampleModule> {
// User config get logged here
console.log(config);
return {
ngModule: SampleModule,
providers: [SampleService, {provide: 'config', useValue: config}]
};
}
}
@Injectable()
export class SampleService {
foo: string;
constructor(@Inject('config') private config:CustomConfig) {
this.foo = ThirdParyAPI( config );
}
}
更新:
因为Angular7ModuleWithProviders
是通用的,所以需要ModuleWithProviders<SampleService>
我正在尝试将配置数据传递到 Angular 中的自定义库中。
在用户应用程序中,他们将使用forRoot
// Import custom library
import { SampleModule, SampleService } from 'custom-library';
...
// User provides their config
const CustomConfig = {
url: 'some_value',
key: 'some_value',
secret: 'some_value',
API: 'some_value'
version: 'some_value'
};
@NgModule({
declarations: [...],
imports: [
// User config passed in here
SampleModule.forRoot(CustomConfig),
...
],
providers: [
SampleService
]
})
export class AppModule {}
在我的自定义库中,特别是 index.ts
,我可以访问配置数据:
import { NgModule, ModuleWithProviders } from '@angular/core';
import { SampleService } from './src/sample.service';
...
@NgModule({
imports: [
CommonModule
],
declarations: [...],
exports: [...]
})
export class SampleModule {
static forRoot(config: CustomConfig): ModuleWithProviders {
// User config get logged here
console.log(config);
return {
ngModule: SampleModule,
providers: [SampleService]
};
}
}
我的问题是如何在自定义库的 SampleService
目前 SampleService
包含以下内容:
@Injectable()
export class SampleService {
foo: any;
constructor() {
this.foo = ThirdParyAPI(/* I need the config object here */);
}
Fetch(itemType:string): Promise<any> {
return this.foo.get(itemType);
}
}
我已经通读了 Providers 上的文档,但是 forRoot
示例非常简单,似乎没有涵盖我的用例。
您就快完成了,只需在您的模块中同时提供 SampleService
和 config
,如下所示:
export class SampleModule {
static forRoot(config: CustomConfig): ModuleWithProviders<SampleModule> {
// User config get logged here
console.log(config);
return {
ngModule: SampleModule,
providers: [SampleService, {provide: 'config', useValue: config}]
};
}
}
@Injectable()
export class SampleService {
foo: string;
constructor(@Inject('config') private config:CustomConfig) {
this.foo = ThirdParyAPI( config );
}
}
更新:
因为Angular7ModuleWithProviders
是通用的,所以需要ModuleWithProviders<SampleService>