为什么必须将共享模块导入根模块?



Angular 2 文档声明"共享功能模块必须由任何希望使用其声明的模块导入"。

我想知道为什么必须将共享功能模块导入根模块。它会增加代码库的复杂性吗?

模块是一种以 angular 声明内容的方法,它定义了这个逻辑块需要什么以及它导出什么。如果不在RootModule中导入SharedModule,则此SharedModule中定义的组件/服务/管道/等将不可用。例如,如果你想能够使用一些内置指令(ngIfngFor等),你需要导入CommonModule(或BrowserModule)。

假设您的SharedModule定义了一个组件:AwesomeComponentawesome作为选择器。如果你想能够在你的RootModule中使用此组件(为什么不呢,它很棒?),你需要导入声明它的模块,否则 angular 会抱怨(或静默失败)它不知道这个<awesome>标签。

如果你想隔离东西,声明多个模块可能很有用,它使您能够制作可以重用的独立库/应用程序的一部分。如果您创建了一个新应用程序并意识到您几周前开发的出色组件非常适合它,那么如果它有自己的模块,您只需要导入它。

它还允许更容易捆绑。 与其将SharedModule包含在每个延迟加载的模块中(延迟加载路由需要单独的模块),不如将其捆绑/加载一次。

那么它会增加代码的复杂性吗?是的,有点,但它有很多优点。

模块不会相互继承,因此即使CharactersModule将由AppModule导入(已经导入SharedModule),CharactersModule无法访问共享功能,除非我们导入SharedModule。这里SharedModule是一个不同的模块,CharactersModule是一个不同的模块,我们想在 AppModule 中使用SharedModuleCharactersModule所以我们需要在两者中导入SharedModule

最新更新