为什么必须将 SharedModule 导入 Root Module?

Why is it must to import SharedModule to Root Module?

Angular 2 个文档状态 "Shared features modules must be imported by any module expecting to use it's declarables".

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

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

模块是在angular中声明内容的一种方式,它定义了这个逻辑块需要什么以及它导出什么。如果您不在 RootModule 中导入 SharedModule,则此 SharedModule 中定义的 components/services/pipes/etc 将不可用。例如,如果您希望能够使用一些内置指令(ngIfngFor、等等...),则需要导入 CommonModule(或 BrowserModule).

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

如果你想隔离东西,声明多个模块会很有用,它使你能够制作独立的 library/part 应用程序,你可以重复使用。如果您制作了一个新应用程序并意识到您几周前开发的很棒的组件可以完美地融入其中,如果它有自己的模块,您只需导入它。

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

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