当我使用带有路由路径的组件时,出现以下错误:
ERROR RangeError: Maximum call stack size exceeded
at Array.unshift (<anonymous>)
at findPath (router.js:1210)
at findPath (router.js:1208)
at findPath (router.js:1208)
at findPath (router.js:1208)
at findPath (router.js:1208)
at findPath (router.js:1208)
at findPath (router.js:1208)
at findPath (router.js:1208)
at findPath (router.js:1208)
当我移除组件时,错误消失了。我已经成功地将组件与其他路由路径一起使用,所以我不确定这里发生了什么。如果非要我猜的话,我会推测这与模块延迟加载有关。
这是我的路由模块:
import { The_Component } from './the-component.component'
import { RouterModule, Routes } from '@angular/router'
import { NgModule } from '@angular/core'
import { A_Resolver } from './a-resolver.resolver'
const routes: Routes = [
{
path: '',
// **** This component causes the error. Removing it removes the error. ****
component: The_Component,
resolve: [A_Resolver],
children: [
{
path: 'some-path',
loadChildren: () => import('some-module.module')
.then((m) => m.Some_Module)
},
{
path: '',
loadChildren: () => import('another-module.module')
.then((m) => m.Another_Module)
},
]
}
]
@NgModule({
imports: [RouterModule.forChild(routes)],
providers: [A_Resolver],
})
export class The_Routing_Module { }
这个路由模块导入到延迟加载模块中:
import { The_Component } from './the-component.component'
import { Shared_Module } from '@libs/clients/feature'
import { NgModule } from '@angular/core'
import { The_Routing_Module } from './routing/the-routing.module'
@NgModule({
declarations: [
The_Component,
],
imports: [
The_Routing_Module,
Shared_Module,
],
})
export class The_Lazy_Module {}
The_Component
只有 <router-outlet></router-outlet>
,因为它是 HTML 并且是一个空组件:
@Component({
templateUrl: 'the-component.component.html',
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class The_Component {}
我在我的路由树中目睹了同样的行为。请注意,上面的惰性模块是从另一个惰性模块加载的。
在路由树的更高位置,我实际上在几种不同的情况下使用了一个带有路由路径的组件,并且没有出现错误。我能够通过从上述延迟加载模块加载另一个延迟加载模块 (Some_Module
) 重现此错误。
关于可能导致此问题的任何理论?