0

我在一个 Angular 应用程序中遇到了问题,我在其中集成了 ng-admin 以提供一个简单的管理面板。当没有当前会话时,我还集成了身份验证并希望指向登录状态。

Ng-admin 本身设置 ui-router 的 else 方法直接指向仪表板。即使设置我自己的$urlRouterProvider.otherwise(...),我也无法强制 ui-router 使用我的其他功能。

我试过这样:

$urlRouterProvider.otherwise(function ($injector) {
    console.log('Hello World?!');
    state.go('login');
});

但是console.log 永远不会被打印出来......

我想在运行任何仪表板代码之前拦截到仪表板的状态转换,并首先将用户重定向到登录页面。

非常感谢任何提示和想法。

4

1 回答 1

0

感谢@user8175473 为我指明了正确的方向。

$on('$stateChangeStart)在执行某些状态代码后,我已经使用as $on('$stateChangeSuccess)is called解决了这个问题。

$rootScope.$on('$stateChangeStart', function(event, toState) {
    if(toState.name !== 'login' && !service.isLoggedIn()) {
        event.preventDefault();
        $state.go('login');
    }
});

请注意,event.preventDefault()需要完全取消状态转换。

于 2017-06-30T08:08:14.160 回答