我在Angularjs中使用ui-router时遇到问题。场景非常简单,我有一个用户列表,当我点击用户的名字时,视图将跳转到编辑表单(这个也是create-new-user表单)。
但问题是,解析编辑状态后返回的值不会改变。好像控制器没有更新新状态。 *(在我的真实项目中尝试使用$ state.reload但没有成功)
以下是我的plnkr供参考:http://plnkr.co/edit/Gv8sQk7ixfni6tzhqjn3
这是我的路由配置:
$stateProvider
.state('list',{
url:'/',
templateUrl:'list.html',
controller:'mainCtrl',
resolve:{
listUser: function(userService){
return userService.list();
}
}
})
.state('user',{
url:'/user',
templateUrl:'form.html',
controller:'userCtrl',
resolve:{
objUser: function(userService){
// Init a new "User" object
console.log("New user");
return "New name";
}
}
})
.state('user.edit',{
url:'/:id',
templateUrl:'form.html',
controller:'userCtrl',
resolve:{
objUser: function(userService, $stateParams){
// Return the user
console.log("Edit user ", userService.get($stateParams.id));
return userService.get($stateParams.id);
}
}
});
我在解决步骤中创建所有必需对象的原因是在阅读了本文Advanced routing and resolves后,我发现自己处于循环中,我在控制器中执行所有请求,当然,重复的代码是有一点我无法避免。所以,我试图通过改变处理数据的方式来改善它,但现在卡住了。
有人能指出我出错的地方吗?非常感谢它。
答案 0 :(得分:1)
在user.edit之后调用用户状态的resolve函数,并覆盖它。
这似乎是这里引用的一个问题: https://github.com/angular-ui/ui-router/issues/868
您可以在https://github.com/angular-ui/ui-router/issues/78和Promise dependency resolution order in angular ui-router
获取一些额外信息答案 1 :(得分:1)
我想说,你的想法并不坏。如果我们应该遵循它,我会使user_new和user_edit状态兄弟姐妹。查看更新的version
.state('user_new',{
url:'/user',
templateUrl:'form.html',
controller:'userCtrl',
resolve:{
objUser: function(userService){
// Init a new "User" object
console.log("New user");
return "New name";
}
}
})
.state('user_edit',{
url:'/:id',
templateUrl:'form.html',
controller:'userCtrl',
resolve:{
objUser: function(userService, $stateParams){
// Return the user
console.log("Edit user ", userService.get($stateParams.id));
return userService.get($stateParams.id);
}
}
})
然后,我们可以修改 user_edit
上的现有内容,并在 user_new
上创建新内容。事实上,这两个州不需要是亲子,因此解析器可以将不同的 userObj
传递给每个......
检查here