我有一个Angular库,里面有来自Angular应用的url的提供商。
export class XXXModule {
static config(SERVER_ADDRESS: string): ModuleWithProviders<any> {
return {
ngModule: XXXModule,
providers: [
{
provide: SERVER_ADDRESS,
useValue: SERVER_ADDRESS
}
]
}
}
}
这个库(XXXModule)是从Angular应用中的惰性加载模块(DashboardModule)
中导入的,使用
export const SERVER_ADDRESS = environment.SERVER_ADDRESS;
imports: [
XXXModule.config(SERVER_ADDRESS)
]
SERVER_ADDRESS在环境文件中定义,用于如下的生产
SERVER_ADDRESS: window.location.protocol + '//' + window.location.host
在app.module.ts文件中通过路由
调用延迟加载模块(DashboardModule)
export const AppRoutes = [
{
path: 'main',
canActivateChild: [AuthGuard],
loadChildren: () =>
import('./components/main/main.module').then(
m => m.DashboardModule
)
}
]
但是,我的问题是SERVER_ADDRESS的意外值,我在我的Angular库中得到了这个地址。
https://test.com/null//null/dynamicExecution/getAll
意想不到的部分是这个/null//null
首先对provide
和useValue
属性使用相同的值是没有意义的。稍后如何获取该值?看到InjectionToken。
另外,在环境文件中使用window.location
也可能导致问题。window
属性在angular构建应用时不可用。