How to redirect in a ui-router resolver?

前端 未结 7 808
我寻月下人不归
我寻月下人不归 2021-02-03 17:58

I am trying to redirect inside a ui-router resolve and wanted to know if there is a way to reroute in a router resolver. Currently this does not work as one would think.

7条回答
  •  耶瑟儿~
    2021-02-03 18:32

    Yauheni's answer does work, but to get around the weird timeout thing, you can reject the promise, and catch that in the $stateChangeError event, and do your redirect there. Like so...

    state('admin', {
      resolve: {
        auth: function(UserService, $q, permissionService) {
          var deferred = $q.defer();
          return UserService.load().then(function(user){
            if (permissionService.can(user, {goTo: state})) {
              return deferred.resolve({});
            } else {
              return deferred.reject({redirectTo: 'some_other_state'});
            }
          });
        }
      }
    });
    

    And then ui-router always broadcasts "stateChangeError", so you can do something like this..

    $rootScope.$on('$stateChangeError', function(evt, to, toParams, from, fromParams, error) {
      if (error.redirectTo) {
        $state.go(error.redirectTo);
      } else {
        $state.go('error', {status: error.status})
      }
    })
    

提交回复
热议问题