Как динамически установить ключ AppID в модуле angular в ngx-agora - PullRequest
2 голосов
/ 27 января 2020

Я использую https://www.npmjs.com/package/ngx-agora для видеосвязи в angular 8. Согласно документации, мне нужно предоставить APPID stati c, как указано ниже

const agoraConfig: AgoraConfig = {
  AppID: '1239021930912039-02193',
};

 imports: [
    BrowserModule,
    NgxAgoraModule.forRoot(agoraConfig)
  ],

, но Я хочу установить значение AppId из ответа API в зависимости от среды. Как я могу установить его, используя APP_INITIALIZER angular? или есть другой способ установить его?

Ответы [ 2 ]

1 голос
/ 27 января 2020

Вы можете добиться этого, используя APP_INITIALIZER, например:

  1. Создайте сервис для получения конфигурации из API, назовем его AppConfigService:
@Injectable()
export class AppConfigService {
  private appConfig;

  constructor(private http: HttpClient) { }

  loadAppConfig() {
    return this.http.get('http://url-to-config-from-environment.ts')
      .toPromise()
      .then(data => {
        this.appConfig = data;
      });
  }

  getConfig() {
    return this.appConfig;
  }
}

^ в этом сервисе вам нужно реализовать реальный код для получения конфигурации, основанной на среде. Вот пример этого.

Внедрить сервис в AppModule:
@NgModule({
  ...
  providers: [
    AppConfigService,
    {
      provide: APP_INITIALIZER,
      useFactory: appInitializerFn,
      multi: true,
      deps: [AppConfigService]
    }
  ],
  ...
})
export class AppModule { }
Реализация фабричной функции appInitializerFn в AppModule:
...
const appInitializerFn = (appConfig: AppConfigService) => {
  return () => {
    return appConfig.loadAppConfig();
  };
};

@NgModule({

Вы можете см. Эту статью для получения более подробной информации.

0 голосов
/ 23 апреля 2020

Решение с поставщиками не работает при использовании AOT, так как NgxAgoraModule использует 'useValue' для Root.

Но вы можете установить APPID позже в процессе, например:

export const agoraConfig: AgoraConfig = {
   AppID: null //setting null here
};

@NgModule({
...
imports: [
    ...
    NgxAgoraModule.forRoot(agoraConfig),
    ....
],
...
})
export class AppModule { }

и затем в месте, где вы создаете клиента агоры (ваш компонент)

// false at the end disabled auto initializing
this.client = this.ngxAgoraService.createClient({mode: 'rtc', codec: 'h264'}, false);
this.client.init('your-agora-APPID');
...