Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS-有条件地为路由设置控制器_Javascript_Angularjs_Angular Routing - Fatal编程技术网

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

Javascript AngularJS-有条件地为路由设置控制器,javascript,angularjs,angular-routing,Javascript,Angularjs,Angular Routing,我正在使用本地AngularJS路由器,想知道是否有一种方法可以有条件地将控制器分配给路由。例如,假设我有三种用户类型: 客人 使用者 系统管理员 当他们来到主页时,我希望能够根据用户类型分配不同的控制器。因此,我将有三个注册控制器:guestHomeCtrl,userHomeCtrl,systemAdminHomeCtrl 我想象的是这样的: $routeProvider .when( '/' , { controller: getHomeCtrl(),

我正在使用本地AngularJS路由器,想知道是否有一种方法可以有条件地将控制器分配给路由。例如,假设我有三种用户类型:

  • 客人
  • 使用者
  • 系统管理员
当他们来到主页时,我希望能够根据用户类型分配不同的控制器。因此,我将有三个注册控制器:
guestHomeCtrl
userHomeCtrl
systemAdminHomeCtrl

我想象的是这样的:

$routeProvider
    .when( '/' , {
        controller: getHomeCtrl(),
        controllerAs: 'homeCtrl'
    })
我知道我可以只传入已注册控制器的字符串,但主要问题是能否找到登录的用户类型。我有一个
userService
,它通常会跟踪这一点,但似乎我无法从设置路由的位置访问它。还是我错了


任何方向都会有很大帮助。

我建议使用带有单个控制器的
userService
。通读以下页面,特别是
resolve
参数

$routeProvider

这篇博文还介绍了如何使用解析

尝试将所需的特定函数或变量发送到控制器。我使用了
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) {
  }
如果你需要,我可以提供更多的例子