【问题标题】:wildcard loading for every route in angular以角度为每条路线加载通配符
【发布时间】:2017-11-13 06:49:54
【问题描述】:

我已在 angular 中将通配符路由添加到我的应用程序中。 问题出在添加通配符之后。

我不确定是什么问题! 下面是路由数组:

const appRoutes: Routes = [
    { path: 'login', redirectTo: '/login', pathMatch: 'full' },
    { path: 'settings', redirectTo: '/settings', pathMatch: 'full' },        
    { path: '**', component: PageNotFoundComponent }       
];

登录和设置是模块,它们有自己的路由文件。 在添加通配符和默认路由之前,应用程序在启动时被重定向到登录屏幕。

但是现在每个 url 都被重定向到 PageNotFoundComponent 。

配置中路由的顺序很重要,这是由 设计。路由器在匹配时使用先匹配获胜策略 路线,所以更具体的路线应该放在不太具体的上面 路线。在上面的配置中,具有静态路径的路由是 首先列出,然后是一个空路径路由,它匹配 默认路由。通配符路由排在最后,因为它匹配每个 URL,只有在没有其他路由首先匹配时才应该选择。

请指导! 谢谢

【问题讨论】:

  • 通配符不应该是数组中的最后一个路由吗?
  • 你为什么要重定向到 SAME 路由?

标签: angular wildcard angular-routing


【解决方案1】:

通配符路由必须是数组中的最后一个。现在,当您的应用程序启动时,路径是空的,因此路由器会路由到与应用程序路由匹配的第一个特定路径,即通配符路由。当您更改顺序以使通配符路由是最后一个时,当您的应用启动时,它会看到它需要重定向以在空路径上登录,BEFORE它会看到通配符路由并且它将按预期工作。其次,不要重定向到同一条路线。为每个以组件为目标的路由使用特定组件。像这样更新你的路由数组。

const appRoutes: Routes = [
  { path: 'login', component: LoginComponent },
  { path: 'settings', component: SettingsComponent },
  { path: '', redirectTo: '/login', pathMatch: 'full'},
  { path: '**', component: PageNotFoundComponent }
];

编辑

OP 表示他们希望为他们在应用程序中拥有的不同功能模块使用单独的路由模块。为此,您有两个我知道的选择。您可以使用Lazy Loading您可以在其自己的路由模块中声明与每个功能模块有关的路由,然后将功能模块导入到您的 app.module 中。该方法在以下堆栈闪电战中得到了演示:https://stackblitz.com/edit/angular-q8mkac

【讨论】:

  • 我试过了。更新了问题。但仍然是同样的问题。网址显示localhost:11962/login,但屏幕加载页面未找到..
  • 使用loginsettings 的特定组件。我不明白您为什么要为这些路线中的每一条重定向到相同的路线。
  • 这是一个错误吗?我有 7-8 个模块,每个模块都有自己的路由模块。也许我也会尝试使用通配符重定向。
  • 不,这不是错误。它旨在像这样工作。如果您希望为每个模块加载单独的路由模块,为什么要在根路由模块中添加它们的路由?只需在您的 app.module 的导入中导入这些模块,您就可以开始使用了!要么这样,要么你可以 LazyLoad 每个模块!
  • 看看这个 stackblitz:stackblitz.com/edit/angular-q8mkac,它应该能完成你想要的。
【解决方案2】:

像这样使用它:确保您已按如下方式创建所有组件

永远不要将通配符路径放在首位,因为它总是将通配符路径作为默认路径。

const appRoutes: Routes = [
    { path: '', component:AppComponent},
    { path: 'login', component:LoginComponent},
    { path: 'settings', component:SettingsComponent},
    { path: '**', component: PageNotFoundComponent }
];

尝试将RouterModule 导入为RouterModule.forRoot(routes, { useHash: true })

【讨论】:

  • 路由可能有问题,可以尝试将RouterModule 导入为RouterModule.forRoot(routes, { useHash: true })
【解决方案3】:

请使用组件而不是通配符:

 { path: 'login', component: LoginComponent , pathMatch: 'full'}

【讨论】:

    猜你喜欢
    • 2019-12-09
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    相关资源
    最近更新 更多