特别是在Android设备上,当使用(以前的硬件)后退按钮时,我的Angular应用程序有时表现得很奇怪,我想了解为什么。 (例如:导航返回打开由$ ionicGoBack()关闭的视图很久以前)
对我来说,似乎一些ui路由器导航创建新的历史堆栈和其他人将历史项目在根历史记录,即使从状态到子状态应附加到状态记录IMO的历史。
问题
>任何人可以解释在哪些情况下ui-sref或$ state.go(…)追加历史项目到新创建的堆栈?
>什么时候它们附加到根?
>是否以特殊方式处理模态?
对不起,没有更具体,但应用程序是相当复杂,我不知道如何隔离在一个plunkr中的问题。也许我错过了一个很好的文档…
很多人 – 包括我自己 – 似乎很难理解导航系统和历史如何工作。
我早些时候回答question试图解释为什么事情不能按预期工作。
看起来导航跟踪用户使用集合访问过的每个视图。
实际上在$ ionicHistory对象中有2个集合。
第一个$ ionicHistory.viewHistory()。视图似乎跟踪当前堆栈中的每个被访问的视图,而其他$ ionicHistory.viewHistory()。histories记录整个应用程序的所有历史。
对于制表符,侧面或常规视图,您可能有不同类型的历史记录。
你可以看到平行的独立历史如何工作在这个codepen。
有2种不同的历史。一个是主选项卡,第二个是关于选项卡。
浏览每个选项卡中的子项,并返回到上一个选项卡,您会注意到导航系统已记住以前的状态。
我准备了另一个plunker在这里,你可以看到导航如何与一些细节显示在页面中。
视图的集合$ ionicHistory.viewHistory()。视图在每次用户访问新页面时更新(集合中的当前视图包含在方括号中)。
您可以更改清除历史记录的行为($ ionicHistory.clearHistory())或设置当前历史记录的根目录:
$ionicHistory.nextViewOptions({ historyRoot: true });
在我的plunker的发票页面上有一个绿色按钮(其他根视图)。当按下我设置新的历史根和更改状态:
$ionicHistory.nextViewOptions({ historyRoot: true }); $state.go('otherviewroot');
事情工作正如所料,事实上现在我没有后视图,我的堆栈只包含当前视图。
当你尝试序列时,事情变得麻烦:
Home - Contacts - Invoices - Home (button in the header).
现在看起来Ionic已经失去了对序列的控制,并继续向集合添加视图。
按home按钮应该清除后退按钮,因为我们在当前历史的根目录,但不会发生。
使用相同的模式反复增加收集的大小无限期。
我想这不是正确的行为,需要一个修复。
回到你的问题。
Android中的后退按钮工作…意味着它遵循相同的模式。
幸运的是,模态不被视为常规视图,并且不影响集合。