2015-05-26 3 views
2

Я изо всех сил стараюсь работать с угловым маршрутом. Я считаю, что документация меньше, чем бесполезная для более сложных частей фреймворка javascript, подобных этому.Угловой маршрут разрешает вызов службы

У меня есть следующие услуги:

app.service("AuthService", ["$http", "$q", function($http, $q){ 

    this.test = function(){ 
    return $q(function(resolve, reject){ 
     var auth = false; 
     resolve(auth); 
    }); 
    } 

}]); 

Теперь мои маршруты выглядит следующим образом:

app.config(["$routeProvider", "$locationProvider", function($routeProvider, $locationProvider){ 

    $locationProvider.html5Mode(true).hashPrefix("!"); 

    $routeProvider 

    .when("/account", { 
    templateUrl: "/views/auth/account.html", 
    controller: "AccountController", 
    resolve: { 
     auth: ["AuthService", function(AuthService) { 
     return AuthService.test().then(function(auth){ 
      if (auth) return true; 
      else return false; 
     }); 
     }] 
    } 
    }); 

}]); 

То, что я хочу, чтобы это произошло здесь следующее:

  • Пользователь переходит к/account
  • AuthService уволен и возвращает переменную е (истина или ложь)
  • В решимостью, если возвращаемое значение является ложным, маршрут не может быть загружен
  • Если возвращаемое значение истинно, аутентификации пользователя и может просмотреть маршрут

Я не думаю, что я полностью понял, как использовать решение, и мой метод пока не работает. Может кто-нибудь объяснить, как правильно это сделать?

ответ

2

Блок разрешений при настройке маршрутов предназначен для того, чтобы сделать навигацию условной на основе разрешения или отказа от обещания.

Вы пытаетесь справиться с этим путем разрешения со значением разрешающей способности true или false

Пожалуйста, попробуйте следующее:

resolve: { 
    auth: ["AuthService", function(AuthService) { 
    return AuthService.test().then(function(auth){ 
     if (!auth){ 
     throw 'not authorized'; 
     } 
    }); 
    }] 
} 

Это заставит обещание быть отвергнута и, следовательно, не допускать маршрутизации продолжить/завершить.

Следует также отметить, что значение выходит из резолюции обещания будет введен в контроллер

+0

Отлично, это сработало отлично! Спасибо. – Coop

0

обработки Это решение работает для меня, я также попытался с .then функции, но это неправильно, потому что решительность выполняет его.

resolve: { 
auth: 
    ["AuthService", "AnotherService", "$rootScope", function(AuthService, AnotherService, $rootScope) { 
     if ($rootScope.yourCondition){ 
      return AuthService.getFunction(); 
     } 
     else{ 
      return AnotherService.getAnotherFunction(); 
     } 
    }] 
}, 
views: { 
'[email protected]': { 
    /* == Component version == */ 
    component: "yourComponent", 
    bindings: { 
     auth: 'auth',  // Inject auth loaded by resolve into component 
     params: '$stateParams' 
    } 
} 
} 
Смежные вопросы