Lazy Loaded模块中的Angular儿童路线不能完全正常工作

时间:2017-05-11 21:35:18

标签: angular angular2-routing

我正在使用Angular 2.3.1

我无法在延迟加载的模块中导航到子路径。对我来说很奇怪的是,3条儿童路线中有2条是完美的。但是当我试图添加第3条路线时,那条似乎不起作用的特定路线。

由于某些路线正常运行,您会认为与该命运之路相关的组件存在问题......但我不相信这种情况......该组件只是裸骨类&模板。其中没有任何内容:

这是我的根应用程序路由

const routes: Routes = [
  {path:'', component: HomePageComponent},
  {
    path: 'facilities',
    loadChildren: './search-page/search-page.module#SearchPageModule'
  },
]

@NgModule({
    imports: [RouterModule.forRoot(routes, {preloadingStrategy: PreloadAllModules})],
    exports: [RouterModule],
    providers: []
})

这是我的模块路由,其中我创建了子路由。

const searchPageRoutes : Routes = [
    {
        path: '',
        component: SearchPageComponent,
        children: [
            {
                path:'search', // ROUTE WORKS
                component: SearchResultsComponent,
                canActivate: [FacilitiesGuard]
            },
            {
                path: ':id', // ROUTE WORKS
                component: FacilityDetailComponent,
                resolve: {facility:  FacilityDataResolver }
            },
            {
                path: 'saved', // ROUTE NOT WORKING
                component: FacilitiesListComponent
            }
        ]
    }
];

@NgModule({
    imports: [
        RouterModule.forChild(searchPageRoutes)
    ],
    exports:[
        RouterModule
    ]
})

错误 我得到的错误与我一起删除路径时发生的错误相同......好像路由甚至没有被定义。 Angular尝试使用路由进行后端API调用:

http://localhost:8080/api/facilities/saved (500) Internal server Error

发生此错误是因为此路由不存在于API中。

我做错了什么或者为什么要保存'路线没有被角度找到?

1 个答案:

答案 0 :(得分:0)

根据评论对话回答:

此处的问题是配置中路由的顺序。

此:

{
    path: ':id', // ROUTE WORKS
    component: FacilityDetailComponent,
    resolve: {facility:  FacilityDataResolver }
},
{
    path: 'saved', // ROUTE NOT WORKING
    component: FacilitiesListComponent
}

需要这样:

{
    path: 'saved', // ROUTE WORKING NOW!
    component: FacilitiesListComponent
},
{
    path: ':id', // ROUTE STILL WORKS
    component: FacilityDetailComponent,
    resolve: {facility:  FacilityDataResolver }
}

基本上,路由器认为尝试转到saved路由的任何内容都在:id路由停止,因为路由器认为术语"已保存"只是传递给它的另一个参数。