嗯,我有这个项目,和ui路由器给我很难的时间。我做了一个快速Plunker演示:http://plnkr.co/edit/imEErAtOdEfaMMjMXQfD?p=preview角ui路由器奋斗
所以基本上我有一个主视图,index.html
,成其他顶级的观点得到注入,这样operations.index.html
。我的大脑中的痛苦开始于顶级视图中存在多个命名视图时,operations.detail.html
和operations.list.html
被注入operations.index.html
,后者又注入index.html
。
基本上,我想要实现的是以下行为:
- 当用户点击导航栏
Operations
项目,显示空(新)操作的页面。网址是/operations
。 - 当他们选择一个列表中的项目时,这些字段会更新一些数据(数据通过服务请求,但为了简单起见,我们假设它在控制器中)。网址是
/operations/:id
。 - 如果他们决定,他们希望创建一个新的项目,在编辑当前,他们可以单击列表顶部
New operation
按钮时,URL变化从/operations/:id
到/operations
。 - 无论新旧项目,导航栏中的项目
Operations
都保持活动状态。 - 如果用户正在编辑一个项目,如果他们创建了一个新项目,应该在列表中高亮显示为活动状态 -
New operation
按钮应该相应地高亮显示。
现在,查看奇怪的行为:转到Operations
,然后再次单击Operations
导航栏项目。一切都消失了。如果我做Operations
- >选择Operation 1
- >选择New operation
也会发生同样的情况。
另外,请检查出的部分,我试图让id
参数:
$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) {
if (toParams) {
if (toParams.id) {
for (var i = 0; i < vm.operations.length; i++) {
if (vm.operations[i].id == toParams.id) {
vm.operation = vm.operations[i];
break;
}
}
}
}
});
我不是专家,但似乎太漫长而复杂的是真实的,尤其是对于这样一个简单的任务作为获取请求参数。如果我试图检查状态变化$stateParams
该对象是空的,因此这种解决方法。如果我试图篡改app.js
中的状态,情况会稍有变化,但总有一些错误,如Operations
导航条项失去其活动状态或其他奇怪的东西。
我知道问这样的一般性问题在SO中是不常见的,但我实在无法理解ui-router的概念,而且我可以感觉到我在这里做错了事,我会很感激帮助指导我如何正确使用ui-router用于我的目的的正确方向。干杯。
你是一个生命的救星。我真的用尽了我的智力法力来找出像“抽象”等状态设置的所需配置。保存我的是1)添加'redirectTo'设置和'redirector'; 2)将'controller'设置添加到状态,因为现在'$ stateParams.id'在每个路由改变(即选择操作)时被更新。现在没有什么能阻止我们征服世界_hehehe_:D干杯,队友! –
如果这是工作,我真的很高兴。享受强大的UI路由器,先生;) –