如何使用服务为state params设置默认值?

时间:2017-01-11 09:09:28

标签: angularjs angular-ui-router

我有一个像param那样的状态,

.state('statename',{
   url : 'emp/:empId',
   ...
   ...
}

这将显示给定员工ID的员工详细信息。如果没有提供empId,我想显示登录用户的详细信息。我已登录用户ID是一项服务'用户'我需要注入这个用户' service并将值设置为empId作为默认值。

该文件说我可以设置params的默认值,如下所示,

.state('statename',{
   url : 'emp/:empId',
   params : {
      empId : 1
   },
   ...
}

我想注入服务并动态提供价值,我尝试了以下选项,

1

 ...
 params : function(User){
     return { empId : User.getLoggedInUserId() }
 } 
 ...

2

 ...
 params : {
     empId : function(User){
        return User.getLoggedInUserId();
     }
 } 
 ...

但没有任何效果。我希望这些都是错误的方法。有什么方法可以实现这个功能吗?

3 个答案:

答案 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