5

我想根据用户的角色在我的 Angular 应用程序中注册路由,我可以执行以下操作:

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服务的方法中,我该如何实现呢?

4

2 回答 2

5

查看ui-router。它是一个功能更丰富的基于状态的 Angular 路由系统。它通过允许您在状态更改时提出模型请求并返回一个承诺来解决您的问题,这样当您获得模型时,您可以继续或再次更改状态。

于 2013-10-28T11:00:37.030 回答
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);
    }
  },

我正在等待有关此的一些反馈。

于 2015-03-12T12:16:49.550 回答