angularjs - 根据用户的访问级别加载不同的 controllers/js 文件
angularjs - load different controllers/js files based on users' access levels
我正在开发一个用户具有不同访问级别的网络应用程序。每个访问级别都有不同的 controllers/views.
组
我正在使用 ngRoute
和 ng-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'
});
});
我正在开发一个用户具有不同访问级别的网络应用程序。每个访问级别都有不同的 controllers/views.
组我正在使用 ngRoute
和 ng-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'
});
});