簡體   English   中英

angularjs路由解決

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM