在加载状态之前,我需要为角度js中的每个状态添加角色?

时间:2015-03-07 09:33:31

标签: javascript angularjs angular-ui-router

在下面的示例中,我在roles内部有data变量,对于此变量,我必须添加角色数组。现在我在第二个状态预定义了角色,但是这个角色数组我必须从web api加载。

.config(['$stateProvider', '$urlRouterProvider', function ($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise('signin');
$stateProvider.state('site', {
    'abstract': true,
    resolve: {
        authorize: ['authorization', function (authorization) {
            alert(JSON.stringify(authorization))
            return authorization.authorize();
        }, ]
    }
})
.state('signin', {
    parent: 'site',
    data: {
        roles: []
    },
    url: '/signin',
    views: {
        '': { templateUrl: '/signin.html' },
        'content@': {
            templateUrl: '/index.html',
            controller: 'SigninCtrl'
        }
    }
})

.state('WorkArea', {
   parent: 'site',
   url: '/WorkArea',
   data: {
       roles: ['User', 'Dev']
   },
   views: {
       '': { templateUrl: '/Views/WorkArea/WorkArea.html' },
       'ContentOne@': {
           templateUrl: '/Views/WorkArea/ProjectList.html',
           controller: 'ProjectController'
       }
   }
 })
}]);

我在下面的链接中引用这个例子: -

angular ui-router login authentication

1 个答案:

答案 0 :(得分:0)

以这种方式定义:

 .state('WorkArea', {
   parent: 'site',
   url: '/WorkArea',
   data: {
       roles: (function() {
                return ['User', 'Dev'];
              })()
   },
 })

您可以在这种情况下使用IIFE动态地向数据属性添加属性。

在app.run中使用:

$rootScope.$on('$stateChangeStart', function(event, toState){ 
    var roles = toState.data.roles ;
    console.log(roles);
   // your custom logic here for that state
})