Использование window.location.origin в angular конфигурации библиотеки с использованием AOT - PullRequest
0 голосов
/ 19 февраля 2020

Когда я передаю window.location.origin в аргументе объекта конфигурации forRoot({...}) моей библиотеки angular и компилирую, используя AOT, его значение просто равно нулю. Есть ли способ передать это значение моей библиотеке angular с включенной AOT?

После некоторого поиска в Google, я думаю, возможно, токен инъекции нужно установить с помощью WINDOW, а затем использовать на стороне библиотеки, но я бы хотел избежать этого, если это возможно. Я также могу просто жестко закодировать происхождение, но это довольно ограниченно. Хотелось бы что-то вроде установить и забыть об этом, поэтому я вырезал особенность в библиотеке.

Моя библиотека настроена следующим образом.

export class AppConfig {
  origin: string;
}

...

export const APP_CONFIG_TOKEN = new InjectionToken<AppConfig>('APP_CONFIG_TOKEN');

...

@NgModule()
export class MyLibrary {
  public static forRoot(config: AppConfig) {
    return {
      ngModule: MyLibrary,
      providers: [
        {
          provide: APP_CONFIG_TOKEN,
          useValue: config
        }   
      ]
    };
  }

Я потребляю значение токена в службе внутри библиотеки

@Injectable()
export class MyService {
  constructor(@Inject(APP_CONFIG_TOKEN) private config: AppConfig) { }

  myOrigin(): string {
    return this.config.origin; // expecting it to return a value like `http://localhost:4200` but it returns `null`
  }
}

, и я импортирую библиотеку в мой AppModule, например,

@NgModule({
  imports: [
    MyLibrary.forRoot({ 
      origin: window.location.origin // with AOT, this seems to be null
    }) 
  ],
  bootstrap: [AppComponent]
})
export class AppModule { }

1 Ответ

0 голосов
/ 19 февраля 2020

AOT строит части приложения так, чтобы клиенту приходилось меньше вычислять. Попробуйте посмотреть на эту проблему

https://github.com/angular/angular-cli/issues/10957

...