我有一个多租户应用程序,被分成多个“门户”
在应用程序加载时,我们可以访问数据库并匹配URL以查找我们应该是哪个门户网站。因此http://www.mywebsite.com/customerA
为应用设置了一些内幕。
const portal: Portal = await this.templateService.addressLookup(url);
然后,我们为每个门户网站设置了默认路由,我正尝试通过以下默认路由将其路由到
this.router.navigateByUrl(portal.routeTo, { skipLocationChange: true });
这很好,将我带到了新路线。
我要完成的工作不是去http://www.mywebsite.com/route
,而是希望用户在URL栏中看到http://www.mywebsite.com/customerA/route
,但可以将其解析为http://www.mywebsite.com/route
在应用中的路由
-我想我可以手动设置网址,但不确定如何处理
要详细说明其设置方法:
1)用户转到http://www.mywebsite.com/customerA
,负载达到数据库的应用负载,并说“好,您是customerA,请转到默认路由/ defaultRoute”。
2)我们设置了一个内部上下文,该上下文保存了portalId以驱动某些功能,并包含所有API调用。
3)现在,我想路由到http://www.mywebsite.com/customerA/defaultRoute
,但是有角度的路由器实际上将其解析为/ defaultRoute
答案 0 :(得分:1)
似乎您需要的是Base URL。通常是在HTML的<base>
中设置<head>
标签的URL,它的作用类似于应用程序中所有相对链接的原始路径。
将此函数放在您的index.html中,因此它将在每次应用启动时运行(取自here的方法,只需添加您自己的逻辑即可根据地址栏中的URL确定基本URL) :
<base href="/">
<script>
(function() {
window['_app_base'] = //your logic to determine a base from the current URL;
})();
</script>
然后,在您的App.module中,让Angular知道(注意提供商):
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { APP_BASE_HREF, Location } from '@angular/common';
import { AppComponent } from './';
import { getBaseLocation } from './shared/common-functions.util';
@NgModule({
declarations: [AppComponent],
imports: [
BrowserModule,
HttpModule,
],
bootstrap: [AppComponent],
providers: [
{
provide: APP_BASE_HREF,
useValue: window['_app_base'] || '/'
},
]
})
export class AppModule { }
如果您需要在应用程序中的某个位置获取它,请使用this:
import { APP_BASE_HREF } from '@angular/common';
...
constructor(@Inject(APP_BASE_HREF) private baseHref:string) {
console.log(this.baseHref);
}