【问题标题】:Why is it must to import SharedModule to Root Module?为什么必须将 SharedModule 导入根模块?
【发布时间】:2021-01-11 06:01:32
【问题描述】:

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

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

【问题讨论】:

    标签: angularjs angular ng-modules


    【解决方案1】:

    Modules 是一种在 Angular 中声明东西的方法,它定义了这个逻辑块需要什么以及它导出什么。如果您没有在您的RootModule 中导入您的SharedModule,则此SharedModule 中定义的组件/服务/管道/等将不可用。例如,如果您希望能够使用一些内置指令(ngIf,ngFor,etc...),则需要导入CommonModule(或BrowserModule)。

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

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

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

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

    【讨论】:

    • 感谢您的反馈。我很感激
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-07
      • 2014-07-10
      • 2023-02-05
      • 2019-12-11
      相关资源
      最近更新 更多