2017-01-16 5 views
0

を働いていない、次のように私の実行ブロックがある:「アプリを*」角度UIルータの移行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

編集:

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を指定することでした機能としてRIA:

 { 
      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} 
    ); 
}]) 
関連する問題