由于我将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期:在迁移之前,我从未在应用程序中浏览时看到任何URL更改。
问题2:在我的代码中工作后,Ionic CLI会像往常一样自动重建代码。然后它实际上应该显示与以前相同的页面,但它没有。home.page
的父菜单突然被隐藏,并且只显示feed.page
及其内容。订阅源页面之外的所有内容都不见了。
为什么会发生这种情况,我该怎么办?这可能只是一个配置,但我不知道在哪里。
经过数小时的调查,我终于找到了问题。
场景1:
如果在浏览器中加载localhost:8100/
,应用程序将按预期启动。
场景2:
如果加载localhost:8100/#/home.page/tabs/t0/tab-0/feed.page
,那么所有涉及的和延迟加载的页面实际上都被加载了两次,最后"杀死"了菜单。
我现在所知道的:
- 我在应用程序的构造函数中手动使用了
this.nav.setRoot(HomePage)
- 这使得所有构造函数加载两次而不是一次
- 这就是我对菜单有问题的原因
我不知道的是:
- 如果页面构造函数被调用两次,为什么菜单会被杀死
- 为什么以及如何根据URL调用
HomePage
构造函数
这里有一个解决方法:
在我的应用程序的构造函数中使用这一点,如果HomePage
已经构造好了,就不会再构造它:
if (this.nav.getActive() instanceof ViewController === false || this.nav.getActive().name !== "HomePage") {
this.nav.setRoot("HomePage");
}