在$ stateProvider中动态注入值

时间:2015-09-22 00:51:50

标签: javascript angularjs angular-ui-router

我的路由中permission对象的访问权限为array

angular.module('app')
    .config(['$stateProvider',function($stateProvider){
    $stateProvider
        .state('staffpanel', {
          url: '...',
          data: {
            permissions: {
              access: ['admin', 'moderator']
            }
          }
     });
}])

从我的服务中我得到一个具有动态值的数组:

var access = ['admin', 'business','moderator];

我可以在array对象中注入此permission吗?在配置中,我只能使用providerconstant。无论如何我们可以在access函数运行时动态注入config数组的值吗?

1 个答案:

答案 0 :(得分:2)

resolve是映射依赖项的替代方法。如果您希望有resolvefactories可以访问 services阶段之后的状态,请使用config

通过使用resolve,您仍然可以将数据传递到州和控制器,而不会有太多麻烦。请注意,此时config阶段已经过去了。另请注意resolve阶段在加载controller 之前发生,因此您可以确保在实例化controller时,您的数据已经注射了。

angular.module('app')
  .config(['$stateProvider',function($stateProvider){
   $stateProvider
    .state('staffpanel', {
      url: '...',
      resolve:{
          //note that you can inject other services/factories here.
          permissions:['access',function(access){
               //return useful stuffs based on your logic
               return ['admin','moderator']
         }]
      }
 });
}])

并且在控制器级别,您只需访问它:

angular.module('app')
 .controller('myCtrl',['$scope','permissions',function($scope,permissions){
    console.log(permissions); //['admin', 'moderator']
}]

但是,出于其他原因,如果您需要在 config阶段进行配置设置,则必须使用提供商。

angular.module('app')
 //inject your other providers here!
 .config(['$stateProvider', 'accessProvider', function($stateProvider,accessProvider){
 $stateProvider
    .state('staffpanel', {
      url: '...',
      data: {
        permissions: {
          //you can use your accessProviders methods here
          access: ['admin', 'moderator']
        }
      }
 });
}])

了解AngularJs中的生命周期是很好的。这篇doc讨论了依赖注入的阶段。