- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要做的是设置 <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
的属性
我知道这可以在构建时设置,但是我开发的网站允许用户自己设置它并且值存储在数据库中(用户将自己安装应用程序)。
最佳答案
我认为您不能使用返回 APP_BASE_HREF
( github issue ) promise 的工厂提供者
一个可能的解决方法是在引导应用程序之前进行远程调用以获取数据,将动态值存储在某处(在下面示例中的 window
中)并在提供 APP_BASE_HREF 时重用它
main.ts
fetch('https://yourbackendconfigserver.com')//Just an example of API call
.then(response => response.json())
.then(json =>{
platformBrowserDynamic().bootstrapModule(AppModule)
.catch(err => console.log(err));
}
);
app.module.ts
export function baseHRefFactory(): Function {
return window['baseHref'];
}
@NgModule({
imports: //...
declarations: //...
providers:[
{
provide: APP_BASE_HREF,
useFactory: baseHRefFactory,
}
],
bootstrap: [ AppComponent ]
})
export class AppModule { }
关于Angular CLI 动态设置 APP_BASE_HREF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54595021/
如何以编程方式获取 APP_BASE_HREF? 我的 app.module.ts 中有这个(APP_BASE='/'): { provide: APP_BASE_HREF, useV
我需要做的是设置 动态标记位于 index.html 中的或者设置 APP_BASE_HREF动态地在 app.module.ts 中 我不确定如何在 index.html 上设置任何内容因为它看起来
在我的 Angular 应用程序中,我想使用环境来设置 自动。 我的 app.module.ts 中有以下相关行: ... import { APP_BASE_HREF } from "@angula
我有一个 Angular 应用程序使用路由和 HashLocationStrategy,我需要在主 html 文件中设置不同的值并在路由中设置不同的值。 我试过这个解决方案: @NgModule({
我正在使用 typescript 2.0.3 编写一个 angular 2.1.0 项目。 我使用以下代码创建了一个 app-config 服务: import { Injectable } from
我开始在我的 Angular 6 应用程序中使用测试。我遇到了一个错误,但我不确定如何解决。 正如您在下面看到的,我的测试提示未设置基本 href,但在我的 index.html 中我确实有 Err
我正在开发第一个 Angular 2 应用程序并具有以下代码 AppModule.ts 代码 import { NgModule } from '@angular/core'; import { Br
我正在开发一个 Angular 应用程序,我面临着设置 HTML 基本 href 值和/或 APP_BASE_HREF 值的问题。 它们之间有什么区别和联系? 最佳答案 一般来说,你只需要设置 .
我正在构建一个 Chrome 浏览器操作扩展程序。 我正在尝试将 Angular 2 应用程序加载到 Chrome 的弹出窗口中。 我在使用 Angular 1.5 之前已经这样做过,但尝试使用 An
我尝试使用来自异步 rest 调用的值在“CoreModule”中设置 APP_BASE_HREF。我看不出这是怎么做到的,因为 provide 方法需要返回一个字符串。 例如: @NgModule(
我是一名优秀的程序员,十分优秀!