我对Angular 2很陌生,对于我是否以正确的方式解决这个问题有点困惑。我正在编写一个多租户应用程序,我希望所有网址都以租户ID开头。例如:https://example.org/tenant-1/product/list
或https://example.org/tenant-2/product/list
。这似乎是一个非常简单且解决得很好的问题,但我很难找到推荐的实现方法。
到目前为止,我已经创建了一个路由服务:
@Injectable()
export class RoutingService {
public ClientId: string = null;
constructor() {}
getRoute(path: string): string {
if (!this.ClientId) {
// For deep-linking
this.ClientId = window.location.pathname.split('/')[1];
}
return '/' + this.ClientId + path;
}
}
向用户显示租户列表并选择一个。这会在ClientId
上设置RoutingService
。
在每个组件中,我在构造函数中导入此RoutingService
,HTML使用它来创建路径:
[routerLink]="[routingService.getRoute('/product/list')]
有更好的方法吗?
答案 0 :(得分:0)
我和你一样处于类似情况,似乎从服务中提取它是目前由于组件封装/隔离的方式:
Angular 2: How to pass route parameters to subroute?
https://angular.io/docs/ts/latest/guide/router.html#!#route-parameters
由于租户是身份验证的一部分,因此我将其烘焙到我的AuthService中,而不是创建RouteService或RouteParamService。除了租户之外,在我的情况下,路由参数可以单独工作。