AngularJS - 有条件地为路线设置控制器

时间:2016-04-19 19:34:03

标签: javascript angularjs angular-routing

我正在使用原生的AngularJS路由器,并且想知道是否有办法有条件地将控制器分配给路由。例如,假设我有三种用户类型:

  • 访客
  • 用户
  • 系统管理员

当他们来到主页时,我希望能够根据用户类型分配不同的控制器。所以我会有三个注册的控制器:guestHomeCtrluserHomeCtrlsystemAdminHomeCtrl

我想象过这样的事情:

$routeProvider
    .when( '/' , {
        controller: getHomeCtrl(),
        controllerAs: 'homeCtrl'
    })

我知道我可以传入已注册控制器的字符串,但主要问题是能够找出登录的用户类型。我有一个userService通常跟踪它,但似乎我不能从我设置路线的地方访问它。或者我错了?

任何方向都会有所帮助。

1 个答案:

答案 0 :(得分:1)

我建议将userService与单个控制器一起使用。阅读下面的页面,特别是resolve参数。

https://docs.angularjs.org/api/ngRoute/provider/ $ routeProvider

此博客文章还介绍了如何使用解决方案。

http://odetocode.com/blogs/scott/archive/2014/05/20/using-resolve-in-angularjs-routes.aspx

尝试将您需要的特定功能或变量发送到控制器。我使用了userService.User.userAccountStatus,但这实际上取决于服务文件中的设置。

$routeProvider
    .when( '/' , {
        controller: HomeCtrl,
        controllerAs: 'HomeCtrl',
        resolve: { 
          userService: function(userService) {
            return userService.User.userAccountStatus();
          }
        }
    })

我使用ngInject注入依赖项,但我假设你得到了向控制器提供服务的要点。

angular
  .module('app')
  .controller('HomeCtrl', HomeCtrl)

  /** @ngInject */
  function HomeCtrl($scope, $log, $state, userService) {
  }

如果您需要,我可以提供更多示例。