AngularJS $http-запрос в функции провайдера

Я пытаюсь реализовать аутентификацию на стороне клиента с помощью AngularJS. Прямо сейчас я ввожу уровни доступа для каждого маршрута в качестве фабрики в функцию конфигурации моего приложения. Вот мой код:

shop = angular.module('shop', ['ngCookies']).
provider('AccessLevels',function () {
    var accessLevels = {
        guest: 7,
        customer: 6,
        seller: 4
    };
    return {
        $get: function () {
            return accessLevels
        }
    }
}).
config(['$routeProvider', '$locationProvider', 'AccessLevelsProvider', function ($routeProvider, $locationProvider, AccessLevelsProvider) {

    var accessLevels = AccessLevelsProvider.$get();

    $routeProvider.
        when('/index', {templateUrl: "pages/index", controller: IndexController, access: accessLevels.guest}).
        when('/user', {templateUrl: "pages/user", controller: UserController, access: accessLevels.customer}).
        when('/sign_up', {templateUrl: "pages/sign_up", controller: SignUpController, access: accessLevels.guest});
}]);

Можно ли получить данные для моих уровней доступа с помощью запроса $http.get? Я не могу внедрить $http в функцию моего провайдера, поэтому в данный момент я немного беспомощен. Любая помощь будет оценена по достоинству.


person knoefel    schedule 19.06.2013    source источник


Ответы (1)


В текущей версии AngularJS вы не можете вставлять $http в блоки конфигурации (подробнее здесь: https://stackoverflow.com/a/12665051/1418796). Кроме того, блоки конфигурации являются синхронными, поэтому вызов async $http в любом случае не сработает.

К сожалению, не существует канонического способа переопределения маршрутов на основе динамических данных. Вы можете попробовать различные обходные пути, один из них описан здесь: https://stackoverflow.com/a/13173667/1418796

person pkozlowski.opensource    schedule 19.06.2013
comment
Большое спасибо за ваш быстрый и действительно полезный ответ! - person knoefel; 19.06.2013