3

Angular 2 文档指出“共享功能模块必须由任何期望使用它的可声明的模块导入”

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

4

2 回答 2

1

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

于 2016-12-15T09:44:54.573 回答
1

模块是一种以角度声明东西的方式,它定义了这个逻辑块需要什么以及它导出什么。如果你不导入你SharedModuleRootModule,这里定义的组件/服务/管道/等SharedModule将不可用。例如,如果您希望能够使用某些内置指令(ngIfngFor等...),则需要导入CommonModule(或BrowserModule)。

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

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

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

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

于 2016-12-15T10:06:14.320 回答