【发布时间】:2015-08-20 14:44:43
【问题描述】:
嗯,我有这个项目,而 ui-router 给我带来了困难。我做了一个快速的 Plunker 演示:http://plnkr.co/edit/imEErAtOdEfaMMjMXQfD?p=preview
所以基本上我有一个主视图index.html,其他顶级视图被注入其中,例如operations.index.html。当顶层视图中有多个命名视图时,我的大脑开始痛苦,operations.detail.html 和 operations.list.html 被注入到 operations.index.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 来实现我的目的。干杯。
【问题讨论】:
标签: angularjs angular-ui-router state