导入前如何从.forRoot获取值?

问题描述 投票:0回答:1
export function getApiKey(config: WebConfigService): Promise<boolean> {
  return new Promise((resolve, reject) => {
    config.getConfigLoaded().subscribe(key => {
      if (key) {
         apikey = config.getString('properties', 'apikey');
        
        resolve(true);
      } else {
        reject(new Error('API Key not found'));
      }
    });
  });

我想解决密钥问题,然后调用forroot,这样
由于 forroot 未定义,此代码需要一些工作 应该有正确的钥匙`

原来如此,看来是有什么误会。在 Angular 中,不建议直接从静态方法访问实例成员,因为静态方法与类本身相关联,而不是与类的实例相关联。但是,您仍然可以通过采用不同的方法来实现您的目标。

 imports: [
    // FwBuilderModule.forRoot(apikey), this imports should be passed correct key

static forRoot(apiKey: string):ModuleWithProviders<FwBuilderModule>{
    @NgModule({
        imports: [
          CommonModule,
          CerillionBuilderBridgeComponent,
          BuilderModule.forRoot(apiKey)
angular angular-material angular-ui-router
1个回答
1
投票

我建议您通过应用程序初始化程序在某些配置服务中保存值,然后使用工厂构建 api 密钥,这取决于配置服务

// config.service
export class ConfigService {
  apiKey: string;
  
  async load() {
    const key = // get a key in an async way
    this.apiKey = key;
  }
}

// module
imports: [BuilderModule],
providers: [{
  provide: BUILDER_API_KEY,
  useFactory: () => inject(ConfigService).apiKey,
}]
// app initializer
providers: [{
   provide: APP_INITIALIZER,
   useFactory: () => {const service = inject(ConfigService); return () => service.load()},
   multi: true
  }]
© www.soinside.com 2019 - 2024. All rights reserved.