允许仅从特定状态转换到UI路由器中的状态

时间:2015-08-05 07:59:54

标签: angularjs angular-ui-router

我正在使用UI路由器并尝试弄清楚如何允许用户仅从其他两个状态访问状态。否则,应将用户重定向到家庭状态。

在这种情况下,我只希望用户能够从payment.confirmation状态和选择状态访问payment.details状态。

我不确定如何结合以下两条规则:

$rootScope.$on('$stateChangeStart',
      function (event, toState, toParams, fromState) {
        if (fromState.name !== 'selection' && toState.name === 'payment.details') {
          event.preventDefault();
          $state.go('home');
        }

        if (fromState.name !== 'payment.confirmation' && toState.name === 'payment.details') {
          event.preventDefault();
          $state.go('home');
        }
});

以下是各州的相关路由器信息:

.state('payment', {
      abstract: true,
      url: '/payment',
      templateUrl: 'app/views/payment.html'
})

.state('payment.details', {
    url: '/details',

    views: {
     'main': {
       templateUrl: 'app/views/cc-payment.html',
       controller: 'PaymentFormCtrl'
     }
   }
 })

.state('payment.confirm', {
      url: '/confirm',

      views: {
       'main': {
         templateUrl: 'app/views/cc-confirm.html',
         controller: 'PaymentFormCtrl'
       }
     }
   }
 })

1 个答案:

答案 0 :(得分:0)

$rootScope.$on('$stateChangeStart',
      function (event, toState, toParams, fromState) {
        if ((fromState.name == 'selection' || fromState.name == 'payment.confirmation ) && toState.name === 'payment.details') {
          event.preventDefault();
          $state.go('payment.details');
        }else{
          event.preventDefault();
          $state.go('home');
        }
});

试试这个。