【发布时间】:2017-09-22 02:29:28
【问题描述】:
当我们在应用程序的根模块中导入BrowserModule时,我们可以使用NgIf和NgFor(在急切加载的组件中)。但是对于延迟加载的模块,我必须导入由根的 BrowserModule 导出的 CommonModule。那么为什么我们必须在延迟加载的模块中再次导入它?
【问题讨论】:
标签: angular lazy-loading
当我们在应用程序的根模块中导入BrowserModule时,我们可以使用NgIf和NgFor(在急切加载的组件中)。但是对于延迟加载的模块,我必须导入由根的 BrowserModule 导出的 CommonModule。那么为什么我们必须在延迟加载的模块中再次导入它?
【问题讨论】:
标签: angular lazy-loading
正如沃德贝尔所说(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
另见:
【讨论】:
浏览器模块用于应用程序的根模块,当我们使用模块时,导入是特定于模块的。 当使用特性模块来延迟加载组件时,我们必须在特性模块中导入通用模块,以便告诉 Angular 浏览器模块包含一些内置指令,如 ngFor 和 ngIf 也可以在特性模块中使用。
请记住,浏览器模块的导入只会在 app.module 中使用一次,而我们想要在我们的功能或共享模块中使用这些内置指令的任何其他地方都需要导入公共模块。
【讨论】: