我使用带有嵌套状态/视图的ui-router,并且我的后退按钮出现问题。
我最初在状态product.business.sub-cat-a
中加载页面。顶级页面有一个搜索输入表单,当使用该表单时,会导致状态转换到状态search
(通过调用$state.go()
),这一切都正常。
但是,如果我点击后退按钮,我会看到状态从search
过渡到product.business.sub-cat-a
按预期(通过调用$state.transitionTo()
),但是还有另外一个致电$state.go()
返回状态search
,我无法确定此来电的来源。
如果有人能够了解ui-router正在做什么,那么会感激一些帮助
我已将此问题追溯到urlRouter
和$location
之间的互动。似乎$urlRouter.update
有时会将统计信息中定义的网址推送到$location
,有时会将值从$location
中提取出来。
在这种情况下,当出现问题时,urlRouter
位置值是旧的URL,它覆盖$location.url
值并导致urlRouter
加载旧状态而不是状态我们正试图回去。
序列似乎是:
urlRouter
上调用更新(没有读取参数),这会导致$location
根据urlRouter位置值重置为前后按钮状态URL urlRouter
然后将两个网址/状态视为不同,以便重新加载现在由$location.url
指定的状态,这是前回按钮网址所以问题似乎是在上面的步骤3中更新状态时urlRouter
位置值没有更新。
任何ui-router / angular专家,请随时指出我正确的方向。
答案 0 :(得分:1)
对于任何遇到类似问题的人来说,问题在于当按下后退按钮时,会触发两个状态转换。第一个是后退按钮产生的正确;第二个是与父(业务)状态相关联的$ state.go(),如上面的层次结构所示。
在resolve
步骤生成的承诺得到解决之前,处理了第二个转换。这意味着urlRouter
位置在随后的$urlRoute.udpate()
调用之前尚未更新,因此路由器重新加载了原始页面。
希望这可能有助于节省其他人一天的调试: - )