Получить значение для поставщика из службы - PullRequest
0 голосов
/ 21 июня 2019

Я пытаюсь присвоить токену провайдера в app.module.ts.

какое-то значение (которое я получил из http-запроса) из другой службы. Моя служба выглядит следующим образом:

@Injectable()
export class AppConfigService {
      private appConfig: AppConfig;

      constructor(private http: HttpClient) {}

      loadConfigurationData = () => {
        this.http.get('assets/config/config.json').subscribe(
          (response: AppConfig) => {
            this.appConfig = response;
          },
          error => {
            this.appConfig = {
              baseHref: '/'
            };
          }
        );
};

      getBaseHref(): string {
        return this.appConfig.baseHref;
      }
}

В моем app.module.ts я пытаюсь получить это значение `baseHref` следующим образом:

@NgModule({  
providers: [
        ...
        AppConfigService,
        {
          provide: APP_INITIALIZER,
          useFactory: (appConfigService: AppConfigService) => () => {
            appConfigService.loadConfigurationData();
          },
          deps: [AppConfigService],
          multi: true
        },
        {
          provide: APP_BASE_HREF,
          useFactory: getBaseHref,
          deps: [AppConfigService],
          multi: true
        },
        ...
      ],
})

export function getBaseHref(appConfigService: AppConfigService): string {
      return appConfigService.getBaseHref();
}

Но я получил ошибку: `Cannot read property 'baseHref' of undefined`.

Похоже, служба не инициализирована, ноЗачем?Как лучше всего передать эту переменную из сервиса в провайдера?

1 Ответ

0 голосов
/ 21 июня 2019

Поскольку вы используете асинхронные данные для обновления переменной appconfig, изначально она будет неопределенной

Appconfig должен быть инициализирован:

 private appConfig: AppConfig = {baseref: null} // or default
...