我有一个像param那样的状态,
.state('statename',{
url : 'emp/:empId',
...
...
}
这将显示给定员工ID的员工详细信息。如果没有提供empId,我想显示登录用户的详细信息。我已登录用户ID是一项服务'用户'我需要注入这个用户' service并将值设置为empId作为默认值。
该文件说我可以设置params的默认值,如下所示,
.state('statename',{
url : 'emp/:empId',
params : {
empId : 1
},
...
}
我想注入服务并动态提供价值,我尝试了以下选项,
...
params : function(User){
return { empId : User.getLoggedInUserId() }
}
...
...
params : {
empId : function(User){
return User.getLoggedInUserId();
}
}
...
但没有任何效果。我希望这些都是错误的方法。有什么方法可以实现这个功能吗?
答案 0 :(得分:2)
使用resolve
。在解析功能中,您可以注入所需的任何服务,就像在控制器中一样。这也是最干净的方法 - 因为不涉及全局变量,您仍然可以按预期使$stateParams
工作。
.state('statename',{
url : 'emp/:empId',
resolve:{
resolve: {
resolveEmpId: ['$stateParams', 'User', function($stateParams, User) {
if ($stateParams.empId === "" ||$stateParams.empId === null ) {
$stateParams.empId = User.getLoggedInUserId();
}
return $stateParams.empId;
}]
}
...
}
这是一个plnkr来展示它的工作原理。完整打开以查看$stateParams
更改。
答案 1 :(得分:0)
state('statename', {
url: 'emp/:empId',
templateUrl: 'new.html',
controller: function($scope, $stateParams, User) {
$stateParams.empId : User.getLoggedInUserId()
}
})
这可能对您有所帮助
答案 2 :(得分:0)
处理状态更改事件并在其中设置参数:
par