Angular2 / Ionic2循环相关模块,因为页面之间的导航

时间:2017-07-04 18:50:53

标签: angular ionic2

我正在重构我的项目以匹配https://angular.io/guide/styleguide的Angular2样式指南。起初我有一个模块,所以没有问题。现在,在重构和拆分模块时,由于不同模块的页面之间的导航,我得到了循环依赖。

简化,我有三个模块,每个模块都有组件:

  • 共享

    • BookListItemComponent
    • AjaxSpinnerComponent
    • FormHelperComponent
    • ...
  • 图书

    • BookComponent
  • 商店

    • ShopListComponent

模块BooksShops每次导入SharedBookListItemComponent会显示一个书名,并在点按时导航到显示该书详情的BookComponent

ShopListComponent显示某个商店的图书清单。

由于Books模块导入Shared模块以使用微调器等,因此会创建循环依赖关系。我们该如何解决这个问题?

在应用中,您可以在不同模块的页面之间导航。我没有办法避免让这些指向对方。特别是使用BookListItemComponent,它在整个应用程序中用于列出书籍。

我也看过:

但无法将此映射到我的问题。

1 个答案:

答案 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不应该导致您出现问题。如果这是整个应用程序中使用的共享模块中的内容,则它不应该依赖于其他模块。除了您需要导入的离子和角度模块之外,您的共享模块不应该依赖于其他任何东西。

相关问题