2017-01-16 6 views
0

Мой запустить блок выглядит следующим образом: '. Приложение *Угловая UI Router Transition HookMatchCriteria не работает

angular.module('app', [...]).run(['$transitions', '$state', 'EmployeeService', ($transitions, $state, EmployeeService) => { 
    $transitions.onBefore(
     { to: 'app.*' }, 
     () => EmployeeService.checkAuth().then(() => { 
      console.log("run success"); 
     }, 
     () => { 
      console.log("run caught"); 
      return $state.target('login'); 
     }), 
     {priority: 10} 
    ); 
}]) 

И по какой-то причине он выполняет для государств приложения "и«входа», хотя они не совпадают соответствуют критериям, и, таким образом, он приводит меня к бесконечному циклу при выполнении выхода из системы. Каков правильный синтаксис для задания критериев соответствия? Я уже смотрел здесь:
https://ui-router.github.io/ng1/docs/latest/interfaces/transition.hookmatchcriteria.html

Edit: Ваши маршруты конфигурации, как запрашиваемых Маршруты для главного модуля (включает в себя состояние «приложения», которые не должны сгореть проверку аутентификации):

export default mainPageRoutesConfig; 

function mainPageRoutesConfig($stateProvider, $urlRouterProvider, $locationProvider) { 
    "ngInject"; 
    $locationProvider.html5Mode(true).hashPrefix('!'); 
    $urlRouterProvider.otherwise('/'); 

    $stateProvider 
     .state('app', { 
      url: '/', 
      component: 'main' 
     }) 
     .state('app.timesheet', { 
      url: 'timesheet', 
      component: 'timesheet' 
     }) 
     .state('app.saveHours', { 
      url: 'saveTaskHours', 
      component: 'saveTaskHours', 
      params: { 
       timesheet:null 
      } 
     }) 
} 

Маршруты для модуля сотрудника (включает в себя состояние «входа», который не должен сгореть проверку аутентификации, а):

export default employeesRoutesConfig; 

function employeesRoutesConfig($stateProvider, $urlRouterProvider, $locationProvider) { 
    "ngInject"; 

    $locationProvider.html5Mode(true).hashPrefix('!'); 
    $urlRouterProvider.otherwise('/'); 

    $stateProvider 
     .state('login', { 
      url: 'login', 
      component: 'login' 
     }) 
     .state('app.employeesList', { 
      url: 'employees', 
      component: 'employeesList' 
     }) 
     .state('app.saveEmployee', { 
      url: 'employee/?Id', 
      component: 'saveEmployee' 
     }) 
     .state('app.deleteEmployee', { 
      url: 'employee/:Id', 
      component: 'deleteEmployee' 
     }) 
     .state('app.employeePage', { 
      url: 'profile/:Id', 
      component: 'employeePage' 
     }) 
} 
+0

Пожалуйста, оставьте свои маршруты, а также. – 31piy

+0

> Каков правильный синтаксис для определения критериев соответствия? --- Ваш синтаксис выглядит правильно. Интересно, это ошибка? Какая версия ui-router? 1.0.0-RC.1? –

ответ

1

решение (хотя на самом деле не ответ) должен был указать матч crite риа как функция:

 { 
      to: function(state) { 
       return state.name !== 'app.login' && state.name !== 'app.error'; 
      } 
     } 

И полный код (после переезда в отдельный файл):

export default ($transitions, $state, EmployeeService) => { 
    $transitions.onBefore(
     { 
      to: function(state) { 
       return state.name !== 'app.login' && state.name !== 'app.error'; 
      } 
     }, 
     () => EmployeeService.checkAuth().then(() => { 
      console.log("run block. Authorization check succeeded"); 
     }, 
     () => { 
      console.log("run block. Authorization check failed"); 
      return $state.target('app.login'); 
     }), 
     {priority: 10} 
    ); 
}]) 

 Смежные вопросы

  • Нет связанных вопросов^_^