防止在ui-router中进入控制器

时间:2015-07-24 22:55:10

标签: angularjs angular-ui-router

以下是我的$ stateProvider配置的摘录

  .state('main', {
    url: '/',
    auth: true,
    views: {
      '@': {
        templateUrl: 'main.html',
        controller: 'MainController'
      },
      'content@main' : {}
    },
    resolve: {
      $user: function ($q, Session) {
        return Session.user();
      }
    },
    onEnter: function($state, Session, $timeout) {
      $timeout(function() { 
        var role = Session.checkUserRole();
        if (role !== 'administrator') {
          $state.go('redirect');
        }
      }, 0);
    }
  })

即使角色不是“管理员”,它仍会执行MainController中的所有代码。以前,我在$ stateChangeStart中有逻辑但是Session.checkUserRole()在我刚刚完成登录后总是返回null。这很可能是由于Javascript的异步性质。是的,我的run.js中的命令首先在我调用的Auth函数中的promise之前完成。 :(

我在寻找是否可以用不同的方式写出决定来容纳我想要发生的事情。

我也不喜欢将$ state.go放在MainController中,因为你仍然可以看到应用程序虽然只有500ms。还是很糟糕!即使我被重定向到警告页面,我仍然看到我的应用程序调用了后端,并且能够检索数据。

如果Session.checkUserRole()在我的.run中返回正确的值并且不为null,那么我就完成了

任何想法/想法?

1 个答案:

答案 0 :(得分:0)

在将Session工厂中的函数转换为promise然后在stateProvider中使用该promise时,我最终修复了它。 :)