模块是否会在延迟加载模块

时间:2017-10-17 14:25:42

标签: angular angular2-modules

当我最近阅读Angular2的doc时,它会这样说:

  

如果我导入两次相同的模块怎么办?

     

这不是问题。当三个模块都导入模块'A',Angular   在第一次遇到模块'A'时评估模块'A',并且没有这样做>试。

     

在任何级别A出现在导入模块的层次结构中都是如此。 >当模块'B'导入模块'A',模块'C'导入'B',模块'D'导入[C,B,A],然后'D'触发'C'的评估,触发评估'B',评估'A'。 当Angular到达'B'时'B'和'A'时,它们已经缓存并准备好

     

Angular不喜欢带有循环引用的模块,所以不要让模块'A'......

但我认为上述内容是在所有Eager Loading Modules的背景下说明的。我怀疑这是否适用于延迟加载模块,例如,如果AppModule和延迟加载功能模块都导入相同的模块(例如ModuleA),ModuleA会被加载两次吗?

我的想法是:当AppModule和延迟加载模块加载时,将创建ModuleA类型的两个模块实例。我的理解是否正确?有人可以帮我澄清一下吗?提前谢谢。

2 个答案:

答案 0 :(得分:2)

目前还不清楚你的意思是什么" loading"。

Angular不会从服务器加载两次。在后续使用中,它从缓存中使用它。

如果你的意思是在内存中是否创建了多个实例,那么是。

延迟加载的模块为依赖项注入创建一个新的子范围。 如果模块由另一个本身延迟加载的模块延迟加载,则DI范围的层次结构将没有意义。

LazyC

如果LazyA只有一个实例,则LazyBLazyC的提供商可以LazyB使用。 如果永远不会加载RootScope怎么办?然后添加提供商是没有意义的。

Angular在创建范围后也无法更新提供程序。这就是延迟加载模块引入新子范围的原因。它们的提供程序未添加到<VirtualHost *:80> DocumentRoot "C:/xampp/htdocs/shareitbaby.io/public" ServerName www.shareitbaby.io ServerAlias shareitbaby.io <Directory "C:/xampp/htdocs/shareitbaby.io/public"> AllowOverride All Order allow,deny Allow from all </Directory> ,因为所有非延迟加载的模块都是如此。 因此,创建新实例是唯一的方法。

在我看来,这并不会造成伤害。 除了DI范围,我不知道这会如何产生影响。

答案 1 :(得分:1)

根据我的实验,当我在Lazy-Load模块中导入相同的模块时,加载延迟加载时,我可以看到该共享模块的构造函数再次被调用。所以这回答了我的问题,答案是肯定的。如果有人有不同的意见,请指出。