我的情况是,我在一个Angular站点中有两个部分,一个用户和一个B用户。这两个用户具有不同的布局样式,菜单等。它们从另一个站点链接到我的站点,因此我必须为其提供两个URL,例如,对于“ A”用户,“ xxx.com/A”,“ xxx.com” / B',代表B用户。
我无法在路由中使用“ {path:”,redirectTo:'/ login',pathMatch:'full'}”,因为我有两个索引/首页,但是如果我配置了应用程序路由。 module.ts如下:
const routes: Routes = [
//{ path: '', redirectTo: '/login', pathMatch: 'full' },
{ path: 'login/A', component: LoginComponent},
{ path: 'login/B', component: LoginComponent}
];
然后,当我在IIS上运行它时,出现404错误。
我知道404错误可能是由于IIS URL重写引起的,但是我无法在服务器上添加它。无论如何,当他们链接到我的网站时,我可以确定两个不同的用户吗,还是可以使两个直接URL起作用?谢谢。
答案 0 :(得分:0)
我编辑我的答案,所以也许我会带您正确的方向。 据我了解,您有2个要求。
1)确定访问者是UserA还是UserB
2)根据UserA或UserB更改网站的行为
首先要识别用户,我们应该从引用站点传递一些参数。通常,应该使用SSO机制(令牌等)完成此操作。但是在这种情况下,为了简化使用Querystring参数的情况。
用户A:http://yoursite.com?user=a
用户B:http://yoursite.com?user=b
因此,现在我们可以确定我们是否正在与用户A或用户B“交谈”。 从现在开始,我们可以根据需要自定义整个应用程序:
不同的布局,不同的布线等
要在特定用例上配置不同的路由,您可以做的是配置不同的路由定义。
const standardRoutes: Routes = [
{
path: 'main',
loadChildren: 'app/main/standard/some.module#SomeModule',
canActivate: [AuthenticationGuard]
},
{
path: 'login',
component: LoginComponent
},
{
path: '**',
redirectTo: 'main/standard'
}
]
const AUserRoutes: Routes = [
{
path: 'main',
loadChildren: 'app/main/a_user/some.module#SomeModule',
canActivate: [AuthenticationGuard]
},
{
path: 'login',
component: LoginComponent
},
{
path: '**',
redirectTo: 'main/a_user_url'
}];
const BUserRoutes: Routes = [
{
path: 'main',
loadChildren: 'app/main/b_user/some.module#SomeModule',
canActivate: [AuthenticationGuard]
},
{
path: 'login',
component: LoginComponent
},
{
path: '**',
redirectTo: 'main/b_user_url'
}];
然后在App Module中处理不同的用户(如果需要定义不同的路由-通常仅在某些非常特殊的情况下才需要)
const standardRoutes: Routes = [
{
path: 'main',
loadChildren: 'app/main/standard/some.module#SomeModule',
canActivate: [AuthenticationGuard]
},
{
path: 'login',
component: LoginComponent
},
{
path: '**',
redirectTo: 'main/standard'
}
]
const AUserRoutes: Routes = [
{
path: 'main',
loadChildren: 'app/main/a_user/some.module#SomeModule',
canActivate: [AuthenticationGuard]
},
{
path: 'login',
component: LoginComponent
},
{
path: '**',
redirectTo: 'main/a_user_url'
}];
const BUserRoutes: Routes = [
{
path: 'main',
loadChildren: 'app/main/b_user/some.module#SomeModule',
canActivate: [AuthenticationGuard]
},
{
path: 'login',
component: LoginComponent
},
{
path: '**',
redirectTo: 'main/b_user_url'
}];
@NgModule({
declarations: [AppComponent],
imports: [
BrowserModule,
BrowserAnimationsModule,
HttpClientModule,
RouterModule.forRoot(standardRoutes, {
enableTracing: false
}),
],
providers: [
],
bootstrap: [AppComponent]
})
export class AppModule {
public constructor(
private router: Router
) {
const user = router.routerState.snapshot.root.queryParams.user;
if (user === 'a') {
router.resetConfig(AUserRoutes);
} else if (user === 'b') {
router.resetConfig(BUserRoutes);
}
}
}