AngularJS ui路由器在使用ng-click时恢复为其他



我正在玩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()relativestateObject。

如果您调试ui-sref的源代码,您会注意到它们使用了go函数:

$state.go(ref.state, params, { relative: base });

如果比较链接使用的base对象和内部控制器调用$state.go(nextStep)使用的默认对象($state.$current),您会发现明显的差异。

虽然我不明白为什么这些会导致你的问题,但你可以通过更新你的ui架构来纠正它。创建一个所有步骤都是其子级的父状态,嵌套ui视图。然后使用父状态控制器来跟踪步数,并管理向前和向后的移动。

最新更新