Что мне нужно сделать, это либо динамически установить тег <base href="" />
, который находится в index.html
ИЛИ установить динамически APP_BASE_HREF
, который находится в app.module.ts
Я не уверен, какустановите что-нибудь на index.html
, так как это выглядит как статический текст.
Я попытался сделать следующее для установки APP_BASE_HREF
, но я получаю сообщение об ошибке ниже:
Unhandled Promise rejection: url.replace is not a function ; Zone: <root> ; Task: Promise.then ; Value: TypeError: url.replace is not a function
at _stripIndexHtml (common.js:282)
at new Location (common.js:149)
at _createClass (core.js:19829)
at _createProviderInstance (core.js:19801)
at initNgModule (core.js:19734)
at new NgModuleRef_ (core.js:20461)
at createNgModuleRef (core.js:20450)
at Object.debugCreateNgModuleRef [as createNgModuleRef] (core.js:22281)
at NgModuleFactory_.push../node_modules/@angular/core/fesm5/core.js.NgModuleFactory_.create (core.js:23009)
at core.js:16622 TypeError: url.replace is not a function
at _stripIndexHtml (http://localhost:3577/vendor.js:25317:16)
at new Location (http://localhost:3577/vendor.js:25184:56)
at _createClass (http://localhost:3577/vendor.js:80131:20)
at _createProviderInstance (http://localhost:3577/vendor.js:80103:26)
at initNgModule (http://localhost:3577/vendor.js:80036:32)
at new NgModuleRef_ (http://localhost:3577/vendor.js:80763:9)
at createNgModuleRef (http://localhost:3577/vendor.js:80752:12)
at Object.debugCreateNgModuleRef [as createNgModuleRef] (http://localhost:3577/vendor.js:82583:12)
at NgModuleFactory_.push../node_modules/@angular/core/fesm5/core.js.NgModuleFactory_.create (http://localhost:3577/vendor.js:83311:25)
at http://localhost:3577/vendor.js:76924:43
Этоэто то, что я пробовал:
export function startupServiceFactory(settingsService: SettingsService): Function {
return async () => {
const ombi = await settingsService.getOmbi().toPromise()
const baseUrl = ombi.baseUrl.length > 0 ? ombi.baseUrl : "/";
return baseUrl;
}
}
@NgModule({
imports: [
// snip
],
declarations: [
// snip
],
providers: [
SettingsService,
{
provide: APP_BASE_HREF,
useFactory: startupServiceFactory,
deps: [SettingsService],
multi: true
}
],
bootstrap: [AppComponent],
})
export class AppModule { }
, как вы можете видеть выше, я пытаюсь вызвать API на сервере, который возвращает объект, затем есть свойство baseUrl
, которое я хочуустановить как APP_BASE_HREF
Я знаю, что это можно установить во время сборки, но созданный мной веб-сайт позволяет пользователю устанавливать его самостоятельно, и значение сохраняется в базе данных (пользователь установит приложениесами по себе).