我正在重构我的项目以匹配https://angular.io/guide/styleguide的Angular2样式指南。起初我有一个模块,所以没有问题。现在,在重构和拆分模块时,由于不同模块的页面之间的导航,我得到了循环依赖。
简化,我有三个模块,每个模块都有组件:
共享
图书
商店
模块Books
和Shops
每次导入Shared
。 BookListItemComponent
会显示一个书名,并在点按时导航到显示该书详情的BookComponent
。
ShopListComponent
显示某个商店的图书清单。
由于Books
模块导入Shared
模块以使用微调器等,因此会创建循环依赖关系。我们该如何解决这个问题?
在应用中,您可以在不同模块的页面之间导航。我没有办法避免让这些指向对方。特别是使用BookListItemComponent,它在整个应用程序中用于列出书籍。
我也看过:
但无法将此映射到我的问题。
答案 0 :(得分:1)
所以我觉得你在重构所有代码时感到很痛苦。我们在工作中使用了其中一个应用程序,但这很痛苦。虽然它的背面,非常值得!离子方式暗示您组织文件的方式是不可持续的。基于可能帮助你的相同的事情,我有几个想法和想法。
首先,将所有内容放回到同一个模块中并不是最好的主意,因为那样你就会以无用的代码开始使用无用的代码,而不是Angular建议的有组织的代码。总的来说,Angular提出了一些很好的模式,我认为让你的代码与他们的建议保持一致是值得的。
其次,这是主要观点,您是否在应用中使用了深层链接?如果您是,那么您可以通过深层链接获得一个很棒的,几乎没有记录的功能,以避免页面内的循环依赖。假设您有一个包含以下深层链接配置的页面:
{
component: MyCoolPage, // the page component class
name: 'MyCoolPage', // I use the name of the class but can be any sting you want
segment: 'cool-page' // optional, not related to the problem,
// but it's probably best to use this field as well
}
每当您想导航到MyCoolPage
,而不是navCtrl.push(MyCoolPage)
时,您现在可以navCtrl.push('MyCoolPage') // or whatever string name you gave the page
。因此,现在您可以通过字符串名称导航到页面,这样就无需在需要导航到页面时导入页面。这个特征自离子2以来就存在,虽然我没有意识到你可以这样做直到更新为离子3。
第三,更多的设计考虑因素,您可能想重新考虑从组件内导航到页面。通常我们所做的是将事件发送到父页面组件,然后使页面组件句柄推送或弹出导航堆栈。您的BookListItemComponent
不应该导致您出现问题。如果这是整个应用程序中使用的共享模块中的内容,则它不应该依赖于其他模块。除了您需要导入的离子和角度模块之外,您的共享模块不应该依赖于其他任何东西。