我想根据用户的角色在我的角度应用程序中注册路由,我可以这样做:
angular.module('myModule', [])
.config(function($routeProvider, $http){
$routeProvider.when('/home',{
templateUrl: '/home.html',
controller: 'HomeCtrl'
});
$http.get('/user')
.success(function(user){
if (user.admin){
$routeProvider.when('/dashboard, {
templateUrl: '/dashboard.html',
controller: 'DashboardCtrl'
});
}
});
});
但在config
方法中,我无法使用$http
服务,我该如何实现呢?
答案 0 :(得分:5)
结帐ui-router。对于Angular来说,它是一个功能更丰富的基于状态的路由系统。它通过允许您在状态更改时发出模型请求来解决您的问题,并返回一个承诺,以便在您获得模型时,您可以继续或更改状态。
答案 1 :(得分:0)
我遇到了同样的问题。 有我的解决方案:
'use strict';
angular.module('theAppName')
.config(function ($routeProvider) {
$routeProvider
.when('/check', { // the role has to be 'not_confirmed'
templateUrl: 'app/account/check/check.html',
controller: 'CheckCtrl'
});
})
.run(function ($rootScope, $location, Auth) {
// Redirect to '/' if the role is not 'not_confirmed'
$rootScope.$on('$routeChangeStart', function (event, next) {
Auth.getUserRoleInAsync(function(role) {
if (next.$$route.originalPath === '/check' && role !== 'not_confirmed') {
$location.path('/');
}
});
});
});
如果您不准确测试路线,将测试所有路线。所以你需要使用next.$$route.originalPath
。
在Auth服务文件中:
getUserRoleInAsync: function(cb) {
if(currentUser.hasOwnProperty('$promise')) {
currentUser.$promise.then(function(data) {
cb(data.role);
}).catch(function() {
cb(false);
});
} else {
cb(false);
}
},
我正在等待一些反馈。