首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Angular 2-4 -如何配置我的模块

Angular 2-4 -如何配置我的模块
EN

Stack Overflow用户
提问于 2017-06-21 16:53:11
回答 1查看 1.2K关注 0票数 0

我不明白为什么我在服务中没有收到配置?

下面是我的模块ScnApiModule

module.ts

代码语言:javascript
运行
复制
@NgModule({
  imports: [
    CommonModule
  ],
  declarations: [],
  exports: []
})
export class ScnApiModule {
  static forRoot(config?: IApiConfig): ModuleWithProviders {
    console.log('ScnApiModule', config); // here I get the config

    return {
      ngModule: ScnApiModule,
      providers: [
        {provide: 'ApiConfig', useValue: config},
        RestService,
...

我的服务

rest.service.ts

代码语言:javascript
运行
复制
@Injectable()
export class RestService {
  constructor(@Inject('ApiConfig') config?: IApiConfig) {
    console.log('RestService', config); // here I get `undefined`
...

主应用程序模块

app.module.ts

代码语言:javascript
运行
复制
export const CONFIG: IApiConfig = {
  apiHost: environment.scnApiLibrary.apiHost,
  authHost: environment.scnApiLibrary.authHost,
  clientId: environment.scnApiLibrary.clientId,
  secret: environment.scnApiLibrary.secret,
};

@NgModule({
...
imports: [
  ScnApiModule.forRoot(CONFIG)
]
...

我做错了什么?如何在服务中获取配置,然后初始化配置

EN

回答 1

Stack Overflow用户

发布于 2017-10-18 18:55:58

首先,使您的IApiConfig可注入,以便任何服务或组件都可以访问它

代码语言:javascript
运行
复制
@Injectable()
export class IApiConfig {
    apiHost:string;
    authHost:string;
    clientId:string;
    secret:string;

    constructor(init?: Partial<IApiConfig>) {
       this.apiHost = init.apiHost;
       ...
    }
}

然后在您的ScnApiModule中,您将不得不构建一个工厂来提供您的配置

代码语言:javascript
运行
复制
export const apiConfigToken = new InjectionToken<IApiConfig>('apiConfigToken');

export function getapiConfigInjectionToken(config: IApiConfig) {
    return new IApiConfig(config);
}

export const APIConfigProvider = {
    provide: IApiConfig ,
    useFactory: getapiConfigInjectionToken,
    deps: [apiConfigToken]
};

改变它的提供方式

代码语言:javascript
运行
复制
export class ScnApiModule {
  static forRoot(config?: IApiConfig): ModuleWithProviders {

    return {
      ngModule: ScnApiModule,
      providers: [
         {provide: apiConfigToken, useValue: config},
            APIConfigProvider,
...

用法

代码语言:javascript
运行
复制
ScnApiModule.forRoot({apiHost: 123,authHost:456})
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44671240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档