Когда я передаю 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 { }