使用“离子服务”的URL重新加载问题

时间:2017-11-10 00:51:29

标签: typescript ionic-framework ionic2 ionic3

自从我将Ionic 2项目迁移到Ionic 3后,我似乎遇到了ionic serve的问题并重建了该项目。

当我第一次构建项目时,一切都按预期工作。但我注意到浏览器的URL栏跳转到类似localhost:8100/#/home.page/tabs/t0/tab-0/feed.page的内容。在它从未这样做之前,它只显示localhost:8100而没有别的。

我的应用逻辑是:有一个更改home.page部分的菜单,home.page中有一个标签栏导航到第一个标签feed.page

问题1 :在迁移之前,我在应用程序中浏览时从未见过任何网址更改。

第2期:使用我的代码后,Ionic CLI会像往常一样自动重建代码。然后它实际上应该显示与以前相同的页面,但事实并非如此。 home.page的父菜单突然隐藏,只显示feed.page及其内容。 Feed页面外的所有内容都已消失。

为什么会发生这种情况,我该怎么办呢?它可能只是一个配置,但我无法找到它。

1 个答案:

答案 0 :(得分:1)

经过数小时的调查,我终于找到了问题。

情景1:

如果您在浏览器中加载localhost:8100/,应用程序将按预期启动。

情景2:

如果你加载localhost:8100/#/home.page/tabs/t0/tab-0/feed.page,那么所有涉及和延迟加载的页面实际上都被加载了两次,最后" kill"关闭菜单。

我现在知道的事情:

  • 我在我应用的构建器
  • 中手动使用了this.nav.setRoot(HomePage)
  • 这使得所有构造函数加载两次而不是一次
  • 这就是我遇到菜单问题的原因

我不知道的是:

  • 如果页面构造函数被调用两次,为什么菜单会被杀死?
  • 为什么以及如何基于URL调用HomePage构造函数?

以下是解决方法:

在我的app的构造函数中使用它,HomePage如果已经构造,则不会第二次构造:

if (this.nav.getActive() instanceof ViewController === false || this.nav.getActive().name !== "HomePage") {
    this.nav.setRoot("HomePage");
}