angularjs - 根据用户的访问级别加载不同的 controllers/js 文件

angularjs - load different controllers/js files based on users' access levels

我正在开发一个用户具有不同访问级别的网络应用程序。每个访问级别都有不同的 controllers/views.

我正在使用 ngRouteng-view。每个控制器都有自己的 JS 文件,它还包含该控制器的路由映射信息。每个控制器看起来像:

angular.module('MainApp', ['ngRoute'])

 .controller('ContollerX', function() {
 })

.config(function($routeProvider) {
  $routeProvider
  .when('/ControllerXURL', {
    templateUrl: 'ViewX.html',
    controller: 'ControllerX'
  });
});

(不确定这是否是最佳做法)

我不想预先加载所有控制器。是否可以根据用户的访问级别只加载用户需要的控制器,这是在 he/she 登录后确定的(从后端返回的用户访问级别数据)?什么是最好的方法?

我正在考虑动态加载控制器脚本,比如插入脚本标签。它会工作吗? AngularJs 有内置函数吗?

在路由定义对象中使用 resolve 属性 可以更简单地实现您想要的效果。 resolve returns promise 和使用 resolve 到控制器的路由只有在这个 promise 被解析时才会被重定向。您可以使用它重定向到所需的视图。

假设您有 2 个视图:AuthorizedUsers.html 和 UnauthorizedUsers.html 以及相应的控制器 AuthorizedUsersController 和 UnauthorizedUsersController。您可以为这些视图定义路由,如下所示:

 angular
   .module('MainApp', ['ngRoute'])
   .controller('AuthorizedUsersController', function(auth) {
   })
   .controller('UnauthorizedUsersController', function() {
   })
   .config(function($routeProvider) {
     $routeProvider
       .when('/authorizedusers', {
         templateUrl: 'AuthorizedUsers.html',
         controller: 'AuthorizedUsersController',
         resolve: {
           auth: function ($q, $location) { 
             var defer = $q.defer();
             if (isAuthorized) {
               defer.resolve();
             } else {
               $location.path('/unauthorized');
               defer.reject();
             }
             return defer.promise;
           }
         }
       })
       .when('/unauthorizedusers', {
         templateUrl: 'UnauthorizedUsers.html',
         controller: 'UnauthorizedUsersController'
       });
   });