Javascript Angular UI Router 1.0.0-使用$transitions.onBefore防止路由加载

Javascript Angular UI Router 1.0.0-使用$transitions.onBefore防止路由加载,javascript,angularjs,angular-ui-router,state,Javascript,Angularjs,Angular Ui Router,State,我升级到UI路由器1.0.0,它已从($stateChangeX上的$on更改为$transitions.onX(()) 在导航到页面之前,我需要解析用户的配置文件及其访问权限(例如,用户不应该看到他们试图转换到的页面)。在此之前,我能够在状态下直接使用解析,并按顺序传递我需要的内容,例如: state('my-state', { ... resolve : { ProfileLoaded : ['$rootScope', function

我升级到UI路由器1.0.0,它已从($stateChangeX上的
$on更改为
$transitions.onX(
())

在导航到页面之前,我需要解析用户的配置文件及其访问权限(例如,用户不应该看到他们试图转换到的页面)。在此之前,我能够在
状态下直接使用
解析
,并按顺序传递我需要的内容,例如:

state('my-state', {
        ...
        resolve : {
            ProfileLoaded : ['$rootScope', function ($rootScope) {
                return $rootScope.loadProfile();
            }],
            access: ['Access', 'ProfileLoaded', function (Access, ProfileLoaded) {
                return Access.hasORRoles(['admin']); //either $q.reject(status code); or "200"
            }]
        }
    })
然后,我可以在
$stateChangeError
中轻松检索错误类型:

app.run(...
    $rootScope.$on('$stateChangeError', function (event, toState, toParams, fromState, fromParams, error) {

       if (error === 401) {
           $state.go('home');
       }
       ...

有了
$transitions
,我也在尝试做同样的事情

.state('user.my-page', {
  ...
  data: {
    loadProfile: true,
    roles: [
      'admin'
    ]
  }
});


app.run(...

  $transitions.onBefore({to: profile}, function(trans) {
    return loadProfile().then(function (prof) {
      var substate = trans.to();
      return Access.hasORRoles(substate.data.roles); //either $q.reject(status code); or "200"
    });
  });

  $transitions.onError({}, function(trans) {
    var error = trans && trans._error;

    if (error == 401) {
      $state.go('home');
    }
    ...
所以我的问题是:


onBefore
是否与
resolve
在确保用户在检查数据之前无法导航方面做了相同的事情?页面仍在加载,然后使用
$state进行重定向。页面加载后转到

仅适用于仍在此处登录的用户

您可以退回一张期票,以防止网站加载

$transitions.onBefore({}, function(transition) {
      return new Promise((resolve) => { 
      // Do auth.. 
      return Access.hasORRoles(['admin']);
   });
});