当我们在应用程序的根模块中导入 BrowserModule 时,我们可以使用NgIf和NgFor(在急切加载的组件中)。但对于延迟加载的模块,我必须导入已由root的BrowserModule导出的CommonModule。为什么我们必须在延迟加载的模块中再次导入它?
答案 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
才能访问ngIf
,ngFor
等指令。您的模块对其他模块的指令一无所知。它只会从导入的模块中查看其declarations
和exports
另见:
答案 1 :(得分:0)
浏览器模块用于应用程序的根模块,当我们使用模块时,导入特定于模块。 当使用延迟加载组件的功能模块时,我们必须在功能模块中导入通用模块,以便告诉Angular浏览器模块whixh包含一些内置指令,如ngFor和ngIf,也可以在功能模块中使用。
请记住,浏览器模块的导入只会在app.module中使用一次,而我们想要在我们的功能或共享模块中使用这些内置指令,我们需要导入公共模块。