有一个项目同时使用延迟加载模块和常规模块。
AppRoutingModule:
const routes: Routes = [
// Пример ленивого модуля.
{
path: 'catalog',
loadChildren: 'app/modules/catalog/catalog.module#CatalogModule'
},
...
// Модуль с 404й страницей
{
path: '**',
loadChildren: 'app/modules/not-found/not-found.module#NotFoundModule'
},
// Не ленивые модули сдесь не объявленны они объявленны на прямую в AppModule
];
一切都会好起来的,但是模块不是AppModule在这个文件中声明的,而是在属性中声明为普通模块imports,
@NgModule({
declarations: [
AppComponent,
],
imports: [
AppRoutingModule,
// Ленивый объевлен в AppRoutingModule
CatalogModule,
// Обычный объявлен только тут и хранит свой path только внутри своего DictionaryRoutingModule
DictionaryModule,
]
})
export class AppModule {}
}
AppRoutingModule从声明 404 页面的位置来看,path: '**'没有DictionaryRoutingModule.
const routes: Routes = [
{
path: 'dictionary',
component: DictionariesComponent,
},
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class DictionaryRoutingModule {
}
并且DictionaryRoutingModule, - 变得不可用。因为当你尝试浏览它们时,它成功了url,路由器重定向到 404 页面。因此,所有以通常非惰性方式声明的模块都不可用,而是显示 404。path: '**'AppRoutingModule
最明显的方法是声明所有模块为惰性,然后问题就消失了。但作为这项任务的条件,我收到了一个要求,不要将普通模块修改为惰性模块。
在这种情况下,如何实现一种通用机制来拦截不存在的地址,从而使现有的列表不仅考虑到延迟加载的模块,还考虑到普通的模块?
要
dictionary在级别注册AppRoutingModule而不**拦截它,您需要这样的路径才能进入AppRoutingModule. 您可以通过重定向到它来解决此问题: