为什么延迟加载模块必须导入commonModule? Angular 2

时间:2017-04-01 05:58:12

标签: angular lazy-loading

当我们在应用程序的根模块中导入 BrowserModule 时,我们可以使用NgIf和NgFor(在急切加载的组件中)。但对于延迟加载的模块,我必须导入已由root的BrowserModule导出的CommonModule。为什么我们必须在延迟加载的模块中再次导入它?

2 个答案:

答案 0 :(得分:21)

正如Ward Bell所说(https://devchat.tv/adv-in-angular/119-aia-avoiding-common-pitfalls-in-angular2):

  

只要您的应用程序中只有一个模块并且您扔了   那里的一切,你都从共同的模块隐藏中受益   在浏览器模块中。 创建新模块的那一刻,懒惰或   不,任何新模块,你宣布任何新模块,新模块   有一个干净的状态。它不知道任何东西,Angular或   任何东西。它是任何模块,而不是您声明的惰性模块   什么,你将不得不导入你实际的一切   需要您在其中声明的任何组件。这就是你的原因   需要通用模块

模块不会继承对其他模块中声明的组件,指令或管道的访问权。https://angular.io/guide/ngmodule#add-the-contactmodule请参见橙色块)

这就是为什么您必须导入CommonModule才能访问ngIfngFor等指令。您的模块对其他模块的指令一无所知。它只会从导入的模块中查看其declarationsexports

另见:

答案 1 :(得分:0)

浏览器模块用于应用程序的根模块,当我们使用模块时,导入特定于模块。 当使用延迟加载组件的功能模块时,我们必须在功能模块中导入通用模块,以便告诉Angular浏览器模块whixh包含一些内置指令,如ngFor和ngIf,也可以在功能模块中使用。

请记住,浏览器模块的导入只会在app.module中使用一次,而我们想要在我们的功能或共享模块中使用这些内置指令,我们需要导入公共模块。