Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在同一父路由下加载多个模块_Javascript_Angular_Module_Router - Fatal编程技术网

Javascript 在同一父路由下加载多个模块

Javascript 在同一父路由下加载多个模块,javascript,angular,module,router,Javascript,Angular,Module,Router,我正在寻找一种方法,通过这种方法,我可以在同一路径下加载多个模块。例如,考虑我有三个模块 AModule < /代码>, BModule < /代码>和 CModule < /COD>每个都有自己的路由器模块。现在我想在saysiteroute下装载所有这些模块 我实现这一点的一种方法是在RouterModule.forChild调用siteroute中包装路由,如下所示: RouterModule.forChild([ { path: 'site', children:

我正在寻找一种方法,通过这种方法,我可以在同一路径下加载多个模块。例如,考虑我有三个模块<代码> AModule < /代码>,<代码> BModule < /代码>和<代码> CModule < /COD>每个都有自己的<代码>路由器模块。现在我想在say
site
route下装载所有这些模块

我实现这一点的一种方法是在
RouterModule.forChild
调用
site
route中包装路由,如下所示:

RouterModule.forChild([
  {
     path: 'site',
     children: [{}] // children goes here
  }
])
我不知道这种方法是否正确,但效果很好。这种方法的唯一问题是,我必须在我想在
站点下装载的每个模块中指定
canActivate
。虽然这不是一个问题,但我一直在寻找更清洁的解决方案

我知道有一个属性
loadChildren
,可以用来延迟加载模块。但我想急切地加载模块

我正在使用AngularCLI,它将我在
loadChildren
中指定的模块的代码拆分到一个单独的JavaScript文件中,这不是我想要的

我正在使用AngularClI v1.2.0和AngularClI v4.2.5

非常感谢您的帮助


谢谢

我不完全清楚你的目标以及你最终想要达到的目标,但这里有一些想法

您可以使用
loadChildren
和“惰性加载”按需加载或快速加载。如果选择急切加载的路由,则在加载主路由并显示第一个视图后,立即异步加载标记为急切加载的其他模块

我这里有一个例子:在
APM Final
文件夹中

我不清楚你为什么不想分裂模块。它可以显著提高应用程序的启动性能(显示第一页的时间)


除了
canActivate
之外,还有一个
canActivateChild
,因此您可以将其放在父级上,而不必对每个路由重复该操作。这方面的文档在这里:

我不确定,但您可以导出AModule和BModule的组件,在CModule中使用这两个组件,然后您可以使用延迟加载来加载CModule为什么在
AModule
BModule
中定义路由,而不是简单地定义没有模块的
路由?模块在路由方面没有任何价值。它们将在编译期间合并。阅读Hi@MaximKoretskyi,感谢您的评论。从你最喜欢的作家那里得到答案总是感觉很棒:-)。让我读一读你提到的那篇文章,我很肯定读完后我会得到答案的。如果有任何进一步的混淆/问题,我将在这里或直接对文章进行评论。谢谢。@ImranLatif,谢谢)是的,一定要读它,并跟进评论。因此,根据您的回答和我对路线的理解,
loadChildren
的默认
loadingStrategy
preload-allmodules
,它将在主路线加载后立即获取在
loadChildren
下定义的路线,如您所述。我说得对吗?基本上,我正在尝试了解我是否可以在同一路径下安装多个模块,即
站点
在一个地方,而不会将代码拆分为单独的JavaScript文件。我在
RouterModule.forChild
中的
site
下加载子路由所使用的技术是否正确?在这种情况下,我不太理解术语“mount”。如果您想使用延迟加载(即时加载或按需加载)的功能,那么它们必须位于单独的捆绑包中。如果没有单独的捆绑包,则当用户请求应用程序时,将下载整个应用程序。预加载不会获取“路由”,而是下载使用角模块定义的捆绑包。预加载被定义为路由配置的一部分。感谢您的精彩解释。我认为我试图实现的目标是不可能以我当时的方式实现的。我将采用另一种策略,在
路径:“站点”
下,我将从各个模块导入
路由配置,并在将它们合并后(因为它们只是普通的旧数组)分配给
子节点,而不是加载模块。我认为这个策略会奏效。