角路由动态显示虚荣路由前缀

时间:2018-12-01 15:48:11

标签: angular

我有一个多租户应用程序,被分成多个“门户”

在应用程序加载时,我们可以访问数据库并匹配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

1 个答案:

答案 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);
}