Angular 路由:有一个异常的单页应用程序
Angular Routing: Single-Page Application with one Exception
我想用默认路由创建一个单页应用程序 DOMAIN/main
。我的目标是,所有其他 URL 都被重定向到这个。唯一的例外是 DOMAIN/privacy
,它应该打开另一个包含隐私相关内容的组件。
例子
具有期望和实际行为的示例:
URL
Expected Behaviour
Actual Behaviour
DOMAIN
DOMAIN/main
DOMAIN/main
DOMAIN/main
DOMAIN/main (just open MainPageComponent)
DOMAIN/main/main
DOMAIN/asdf/bcd
DOMAIN/main
DOMAIN/asdf/bcd (nothing happens except for some errors because it cannot find any runtime.js
and similar files in there (obviously))
DOMAIN/privacy
DOMAIN/privacy (just open ImprintComponent)
DOMAIN/privacy/main
(错误的加粗)
到目前为止我最好的尝试
我最好的尝试是以下(导致上述行为):
我通读了很多帖子,但对我来说,没有什么能像我期望的那样真正起作用(甚至 **
部分...)。
const routes: Routes = [{
path: "main",
component: MainPageComponent,
pathMatch: "full",
},
{
path: "privacy",
pathMatch: "full",
component: ImprintComponent
},
{
path: "",
redirectTo: "/main",
pathMatch: "full",
},
{
path: "**",
redirectTo: "/main",
}]
imports: [
RouterModule.forRoot(routes)
],
问题
如何使它正常工作?我真的不明白那些奇怪的重定向/路径,也不明白为什么 **
即不匹配 /asdf/bcd
并因此重定向到 /main
...
如果您需要更多信息,我会尽快提供。谢谢! :)
删除主目录中的 pathMatch: 'full'
并将其保存在隐私目录中。另外,你不需要 '**'
它应该看起来像:
const routes: Routes = [{
path: "main",
component: MainPageComponent,
},
{
path: "privacy",
component: ImprintComponent,
pathMatch: "full"
},
{
path: "",
redirectTo: "/main",
pathMatch: "full",
}]
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule],
})
export class AppRoutingModule {}
你可以像下面这样使用它。除了重定向,您还可以提供组件本身。此外,从除“”以外的配置中删除 pathMatch 参数。
const routes: Routes = [{
path: "main",
component: MainPageComponent,
},
{
path: "privacy",
component: ImprintComponent
},
{
path: "",
component: MainPageComponent,
pathMatch: "full",
},
{
path: "**",
component: MainPageComponent,
}]
天哪,我终于解决了这个问题。正如我已经怀疑的那样,路由本身并不是问题所在。为了构建 Angular-Project,以便我可以在实时服务器上使用它,我将 "baseHref": ""
添加到 anglar.json
因此 现在可以工作了 只需删除 "baseHref": ""
或将 ig 更改为 "baseHref": "/"
。
我想用默认路由创建一个单页应用程序 DOMAIN/main
。我的目标是,所有其他 URL 都被重定向到这个。唯一的例外是 DOMAIN/privacy
,它应该打开另一个包含隐私相关内容的组件。
例子
具有期望和实际行为的示例:
URL | Expected Behaviour | Actual Behaviour |
---|---|---|
DOMAIN | DOMAIN/main | DOMAIN/main |
DOMAIN/main | DOMAIN/main (just open MainPageComponent) | DOMAIN/main/main |
DOMAIN/asdf/bcd | DOMAIN/main | DOMAIN/asdf/bcd (nothing happens except for some errors because it cannot find any runtime.js and similar files in there (obviously)) |
DOMAIN/privacy | DOMAIN/privacy (just open ImprintComponent) | DOMAIN/privacy/main |
(错误的加粗)
到目前为止我最好的尝试
我最好的尝试是以下(导致上述行为):
我通读了很多帖子,但对我来说,没有什么能像我期望的那样真正起作用(甚至 **
部分...)。
const routes: Routes = [{
path: "main",
component: MainPageComponent,
pathMatch: "full",
},
{
path: "privacy",
pathMatch: "full",
component: ImprintComponent
},
{
path: "",
redirectTo: "/main",
pathMatch: "full",
},
{
path: "**",
redirectTo: "/main",
}]
imports: [
RouterModule.forRoot(routes)
],
问题
如何使它正常工作?我真的不明白那些奇怪的重定向/路径,也不明白为什么 **
即不匹配 /asdf/bcd
并因此重定向到 /main
...
如果您需要更多信息,我会尽快提供。谢谢! :)
删除主目录中的 pathMatch: 'full'
并将其保存在隐私目录中。另外,你不需要 '**'
它应该看起来像:
const routes: Routes = [{
path: "main",
component: MainPageComponent,
},
{
path: "privacy",
component: ImprintComponent,
pathMatch: "full"
},
{
path: "",
redirectTo: "/main",
pathMatch: "full",
}]
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule],
})
export class AppRoutingModule {}
你可以像下面这样使用它。除了重定向,您还可以提供组件本身。此外,从除“”以外的配置中删除 pathMatch 参数。
const routes: Routes = [{
path: "main",
component: MainPageComponent,
},
{
path: "privacy",
component: ImprintComponent
},
{
path: "",
component: MainPageComponent,
pathMatch: "full",
},
{
path: "**",
component: MainPageComponent,
}]
天哪,我终于解决了这个问题。正如我已经怀疑的那样,路由本身并不是问题所在。为了构建 Angular-Project,以便我可以在实时服务器上使用它,我将 "baseHref": ""
添加到 anglar.json
因此 现在可以工作了 只需删除 "baseHref": ""
或将 ig 更改为 "baseHref": "/"
。