【发布时间】:2017-07-05 20:11:10
【问题描述】:
我正在重构我的项目以匹配 https://angular.io/guide/styleguide 的 Angular2 样式指南。起初我只有一个模块,所以没有问题。现在,在重构和拆分为模块时,由于不同模块页面之间的导航,我得到了循环依赖。
简单来说,我有三个模块,每个模块都有组件:
-
共享
- BookListItemComponent
- AjaxSpinner 组件
- FormHelperComponent
- ...
-
书籍
- 图书组件
-
商店
- 商店列表组件
模块Books 和Shops 分别导入Shared。 BookListItemComponent 会显示书名,点击后会导航到显示书名的BookComponent。
ShopListComponent 显示的是某个商店的图书列表。
由于Books 模块导入Shared 模块以使用微调器等。这会产生循环依赖。我们应该如何解决这个问题?
在应用程序中,您可以在不同模块的页面之间导航。我没有办法避免让这些相互指向。尤其是在整个应用程序中用于列出书籍的 BookListItemComponent。
我也看过:
- https://forum.ionicframework.com/t/ionic2-navigation-circular-depencies/41123/6
- Circular dependency injection angular 2
但无法真正将其映射到我的问题。
【问题讨论】:
-
ShopListComponent 显示某个商店的书籍列表。这会在商店和书单和书单之间建立关系,因此这两个模块就像混合在一起,所以我想您需要有一个通用模块才能实现此功能,即书和商店都将用于连接到书单项目组件.这可能会解决问题
-
问题是它发生在整个应用程序中,因为页面在商店、书籍、卖家等之间相互链接。那么唯一的方法就是创建一个模块。我也在考虑共享导航服务之类的东西。还阅读了有关 forwardRef 的信息,但没有看到这将如何解决我的问题。
-
我同意@RahulSingh,如果它是一个通用功能,它应该被移到一个通用模块(又名共享)。这个想法是 FeatureModule 不相互交谈,而是使用 CommonModule。此外,它与您所做的设计决策、如何设计组件以使其可重用有关。基本上你解决了模块之间没有依赖关系的循环依赖问题,并将公共依赖集中在一个新模块中。
-
我明白了,给定的例子是一个简化版本。在真正的应用程序中,我有 40 多个组件和大约 12 个模块。所以基本上这意味着我必须对所有可以展示一本书的组件进行分组。这意味着几乎每个模块,因为该应用程序以书籍为中心。考虑前 100 本书、您附近销售的书籍列表、详细视图列出其书籍的出版商列表
-
不完全一样,只是切断了双向依赖,你可以拥有你的 book 模块并按原样使用它,只是不要让模块依赖于另一个模块,你可以移动所有的book 依赖项从共享模块到您的 book 模块,或者您可以将所有内容移动到共享模块。这里的重点是:不要创建循环依赖。您可以通过做出良好的设计决策来避免循环依赖,以这样的方式构建您的模块,使模块不需要依赖于其依赖项。