我正在玩AngularJS作为一种学习练习。我正在努力掌握AngularJS ui路由器(https://github.com/angular-ui/ui-router)我遇到了一个问题。
我把一个plunk放在一起进行说明和复制。
http://plnkr.co/edit/OvmOKPMfeFqNWc7ToCff?p=preview
上面是一个简单的向导类型组件,顶部有选项卡可移动到特定步骤,底部有一些下一步/上一步按钮可移动到下一个相关页面。
顶部的选项卡导航工作正常,单击移动会相应地更改视图和URL。
然而,下一步/后退按钮的行为非常奇怪,因为它们在您第一次单击下一步时起作用,但之后不会起作用。你应该能看到我在说什么。
看起来它试图导航到正确的视图,但随后立即恢复到否则规则。
我在代码中添加了钩子,以便在控制台中进行跟踪。本质上,所有下一步/上一步按钮都被称为相关状态,因此$state.go("step1")、$state.ggo("step3")等。
希望我已经提供了足够的信息,并感谢任何人能带来的见解。
谢谢。
您必须从锚点的href属性中删除'#'。
我还没能找出确切的原因,但看起来主要的区别是传递给$state.go()
的relative
stateObject。
如果您调试ui-sref
的源代码,您会注意到它们使用了go函数:
$state.go(ref.state, params, { relative: base });
如果比较链接使用的base
对象和内部控制器调用$state.go(nextStep)
使用的默认对象($state.$current
),您会发现明显的差异。
虽然我不明白为什么这些会导致你的问题,但你可以通过更新你的ui架构来纠正它。创建一个所有步骤都是其子级的父状态,嵌套ui视图。然后使用父状态控制器来跟踪步数,并管理向前和向后的移动。