[英]angularjs route to resolve
我的應用程序中有大量的angularjs路由。 我想根據一些用戶權限級別來設置對這些路由的訪問權限。
angular.module('myApp').run(['$rootScope', 'someAuthFactory', function($rootScope, someAuthFactory) {
$rootScope.$on('$stateChangeStart', function (event, toState) {
$rootScope.permissions = someAuthFactory.getPermssionLevels();
$rootScope.specialRights = $rootScope.permissions.indexOf('superRole') > -1;
...
這是我的路線之一:
.state("dashboard.overview", {
url: "/dashboard",
templateUrl: "app/dashboard.html",
resolve: {
roles: ['rootScope', function (rootScope) {
return $rootScope.specialRights;}]
},
因此此代碼有效,但是如果我想添加以下代碼:
resolve: {
roles: ['rootScope', function (rootScope) {
return $rootScope.specialRights;}]
}
到每條路線,都會有重復的代碼,或者如果我想查找其他角色,那將很無聊。 我們能否使解決方案的部分更小,更清潔?
在這樣的路由之上在config函數中創建一個變量
var resolveRoles = ['rootScope', function (rootScope) {
return $rootScope.specialRights;}]
}
並在每條這樣的路線中使用它
.state("dashboard.overview", {
url: "/dashboard",
templateUrl: "app/dashboard.html",
resolve: {
roles: resolveRoles
},
});
您可以創建共享$ rootScope.specialRights的服務/工廠。 只需在路線的第一個解析中在服務中初始化$ rootScope.specialRights即可,例如
.state("dashboard", {
url: ...
templateUrl: ...
resolve: {
roles: ['rootScope', function (rootScope) {
YourServiceOrFactory.setSpecialRights($rootScope.specialRights);
return $rootScope.specialRights
}]
},
在您需要的地方
YourServiceOrFactory.getSpecialRights()
它不必在其他解析中,只需在您的路線控制器或指令/組件中即可。 比多種解決方案更干凈,性能更高。
由於您已經在$rootScope
設置了此屬性,因此在所有路徑中都使用resolve
只是為了獲取可變值,這是一個過大的選擇,當然, resolve
不是為此目的而設計的。
相反,只需在控制器中注入$rootScope
並在控制器中使用$rootScope.specialRights
。
例:
在控制器,服務,指令或組件中,您可以像這樣注入$rootScope
:
angular.module('your_module')
.controller('your_controller', ['$rootScope', function($rootScope) {
// Access $rootScope.permissions or $rootScope.specialRights here
}];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.