我使用的离子 V1.0.0和不理解所管理的并行方式的历史$ionicHistory著作。
$ionicHistory
特别是在Android设备上,当使用(以前为硬件)后退按钮时,我的Angular应用有时会表现得很奇怪,我想了解原因。(示例:向后导航可打开$ionicGoBack()很久以前关闭的视图)
$ionicGoBack()
对我来说,似乎某些ui路由器导航会创建新的历史记录堆栈,而其他一些则将历史记录项放在根历史记录中,即使从状态到子状态的访问都应附加到记录了IMO的历史记录中。
问题
ui-sref
$state.go(...)
root
抱歉,没有具体说明,但是该应用程序相当复杂,我不知道如何在单个插件中隔离问题。也许我错过了一些很好的文档…
即使您可能找不到要查询的所有信息,我也会尝试回答这个问题。
很多人-包括我自己-似乎很难理解导航系统和历史的工作方式。
前面我已经回答了一个问题,试图解释为什么事情没有按预期进行。导航似乎可以跟踪用户使用集合访问过的每个视图。实际上,$ionicHistory对象中有2个集合。第一个$ionicHistory.viewHistory().views似乎跟踪当前堆栈中每个已访问的视图,而另一个$ionicHistory.viewHistory().histories跟踪整个应用程序的所有历史记录。
$ionicHistory.viewHistory().views
$ionicHistory.viewHistory().histories
选项卡,菜单或常规视图的历史记录类型可能不同。
您可以在此Codepen中看到并行的独立历史记录如何工作。 那里有2种不同的历史。一个用于主页选项卡,第二个用于关于选项卡。
浏览每个选项卡中的子项并返回上一个选项卡,您会注意到导航系统已记住了先前的状态。
我在这里准备了另一个插件,您可以在其中查看导航的工作方式以及页面中显示的一些详细信息。
$ionicHistory.viewHistory().views每次用户访问新页面时,视图的集合都会更新(集合中的当前视图用方括号括起来)。
如果视图已添加到集合中,则不会(不应)再次添加。
您可以清除历史记录($ionicHistory.clearHistory())或设置当前历史记录的根目录来更改行为:
$ionicHistory.clearHistory()
$ionicHistory.nextViewOptions({ historyRoot: true });
在我的小矮人的“发票”页面上,有一个绿色按钮(“其他”根视图)。当按下时,我设置新的历史记录根并更改状态:
$ionicHistory.nextViewOptions({ historyRoot: true }); $state.go('otherviewroot');
事情按预期工作,实际上我现在没有后视图,并且堆栈仅包含当前视图。
当您尝试序列时,事情变得混乱了:
Home - Contacts - Invoices - Home (button in the header).
现在看来,Ionic已失去对序列的控制,并继续向集合中添加视图。
按下主页按钮应清除后退按钮,因为我们位于当前历史记录的根目录下,但不会发生。
一遍又一遍地使用相同的模式会无限期地增加集合的大小。
我猜这不是正确的行为,需要修复。
回到您的问题。
Android中的“后退”按钮可以正常工作…表示它遵循相同的模式。
幸运的是,模态不被视为常规视图,并且不会影响集合。