如何在angularjs $ state

时间:2017-07-16 07:53:25

标签: javascript angularjs angular-ui-router

有人可以帮助我,我可以解决这个问题

我想限制用户访问他们必须访问的页面。 我唯一知道的是我在$ state中使用resolve来做到这一点 但我无法将用户重定向到401页面,例如,如果他们访问受限制的页面..

这是我的$ state config

   .state('app.libraries.class', {
        url: '/class',
        data: { pageTitle: 'Class Library' },
        templateUrl: 'views/libraries/class.html',
        resolve: {
            access: ['$q','AccessService', function($q,AccessService){
                var currentUser = AccessService.currentUser();
                if(currentUser.hasAccess === "false"){
                    return $q.reject('unauthorized!');
                }

            }]
        }
    })
    .state('app.libraries.account', {
        url: '/account',
        data: { pageTitle: 'Account Library' },
        templateUrl: 'views/libraries/account.html',
        resolve: {
            access: ['$q','AccessService', function($q,AccessService){
                var currentUser = AccessService.currentUser();
                if(currentUser.hasAccess === "false"){
                    return $q.reject('unauthorized!');
                }

            }]
        }
    })

这是我的$ stateChangeError

$rootScope.$on('$stateChangeError', function(event, toState, toParams,
fromState, fromParams, error) {
    event.preventDefault();
    $state.go('app.dashboard.index');
});

应该是什么问题?我刚刚收到此错误

转换拒绝($ id:0类型:6,消息:转换错误,    细节:未经授权!)

1 个答案:

答案 0 :(得分:0)

由于你使用的是ui-router 1.0.3,我猜你的问题是不再触发stateChange事件。

在他们的文档中:

  

注意:状态更改事件已弃用,已禁用并已从版本1.0的Transition Hooks替换

现在您应该使用Transition Hooks,请查看以下链接:https://ui-router.github.io/guide/ng1/migrate-to-1_0#state-change-events

您可以使用以下内容替换$rootScope.$on('$stateChangeError, ...

app.run(function($transitions,$state) {
  $transitions.onError({ }, function(trans) {
     $state.go('app.dashboard.index');
  });
})

另请看一下:https://ui-router.github.io/ng2/docs/latest/classes/transition.transition-1.html#onerror

它可以帮到你