Angular 角度2懒散加载取决于现有的URL分段

Angular 角度2懒散加载取决于现有的URL分段,angular,Angular,我想加载一个组件,它完全依赖于用户给定的url。更准确地说,它取决于第二个url段 这就是我读取段然后加载等效模块的方式 var pathArray = window.location.pathname.split( '/' ); var segment = pathArray[2]; export const routes:Routes = [ { path: "", component : DeskComponent, childre

我想加载一个组件,它完全依赖于用户给定的url。更准确地说,它取决于第二个url段

这就是我读取段然后加载等效模块的方式

var pathArray = window.location.pathname.split( '/' );
var segment = pathArray[2];

export const routes:Routes = [
    {
        path: "",
        component : DeskComponent,
        children: [
            {
                path: "",
                loadChildren: "app/desk/" + segment + "/" + segment + ".module#" + (segment.charAt(0).toUpperCase() + segment.slice(1)) + "Module"
            }
        ]
    }
]; 
现在我知道这还远远不够完美。由于这是一个子路由,并且父路由实际上传递参数segment
desk/:segment
,因此我可以在我的组件中订阅ActivatedRoute.params并获取该段

ngOnInit() {
  this.route.params
    .subscribe((params: Params) => params['segment']);
}

我的子路由是否有可能等待该参数并调整其到该参数的路由?我不知道如何将它们结合在一起。

我不太了解您的路线层次结构

难道不可能预先声明所有可能的路线吗

const segments=['foo','bar'];
导出常量路由:路由=[];
设capitalizedSegment=segment.charAt(0.toUpperCase()+segment.slice(1);
对于(让段中的段){
推({
路径:`some/path/${segment}`
loadChildren:`app/desk/${segment}/${segment}.module#${capitalizedSegment}模块`
});
}

我找到了一个解决方案。我从子模块中剥离了路由,并在父模块中定义了所有路由


我不知道我仍然可以在我的子模块中保留我的路由器出口。我想他们还需要一个路由配置。但事实并非如此!因此,我可以将系统保留在子模块中,而无需任何路由配置

是否可以在应用程序初始化期间预先声明所有可能的路径,而不是在运行时计算路径?@AngularFrance这是一个选项。但是,由于我的路径是空的,并且没有规则,您将如何选择加载哪个模块?嗯,您的路由设置方式有点混乱。您提到过延迟加载的内容是基于URL段的。所以说你有某种形式的“要加载的路径模块”映射在概念上正确吗?@AngularFrance是的,我理解。这是我的冲突:在父路由上,我传递组件中需要的param
:segment
。这是我的数据请求的重要信息。因此,由于我已经在父路由上设置了段,我无法在需要确定哪个模块引用此段的子路由上进行设置。否则我会让路线app/desk/:segment/:segment…重复。这可以理解吗?这就是为什么我把这条路留白的原因。谢谢你@AngularFrance。这绝对是解决问题的好办法。我找到了另一种方法来设置我的路由,并且仍然保留我的子配置(outlets和params)。