如何将外部函数附加到 $routeProvider 解析?

How to attach outer function to $routeProvider resolve?

这段代码工作正常:

$routeProvider.when('/clients',
        {
            templateUrl:'/views/clients.html',
            controller:'clientsController',
            resolve: {
                rights: function ($rootScope, apiService) {
                    var userInfo = localStorage.getItem("connectionInfo");
                    if (userInfo) {
                        userInfo = JSON.parse(userInfo);
                        var promiseObj= apiService.getUsersRights(userInfo.auth_token);
                        promiseObj.then(function(value) {
                            console.log(value);
                            $rootScope.user.rights = value.values.rights;
                            return value.values.rights;
                        });
                    } else {
                        return null;
                    }
                }
            }
        });

我想多次使用这个功能,但是当我尝试这个时,它不起作用。它抛出注入错误。

function userRightsResolver ($rootScope, apiService) {
    var userInfo = localStorage.getItem("connectionInfo");
    if (userInfo) {
        userInfo = JSON.parse(userInfo);
        var promiseObj= apiService.getUsersRights(userInfo.auth_token);
        promiseObj.then(function(value) {
            console.log(value);
            $rootScope.user.rights = value.values.rights;
            return value.values.rights;
        });
    } else {
       return null;
    }
}

$routeProvider.when('/clients',
        {
            templateUrl:'/views/clients.html',
            controller:'clientsController',
            resolve: {
                rights: userRightsResolver($rootScope, apiService)
            }
        });

我是 angularJS 的新手。怎么弄好?

您可以尝试我在我的应用程序中使用的以下方法。

在您的路由上方创建一个 routeResolve 对象,并为其提供表示您将重用的解析函数的方法:

var routeResolve = {
  rights: ['$rootScope', 'apiService', function($rootScope, apiService) {
    var userInfo = localStorage.getItem("connectionInfo");
    if (userInfo) {
      userInfo = JSON.parse(userInfo);
      var promiseObj= apiService.getUsersRights(userInfo.auth_token);
      promiseObj.then(function(value) {
        console.log(value);
        $rootScope.user.rights = value.values.rights;
        return value.values.rights;
      });
    } else {
       return null;
    }
  }],
  anotherMethod: [function() {...}]
};

那么在你的路线中,你可以这样做:

$routeProvider
  .when('/clients', {
     templateUrl:'/views/clients.html',
     controller:'clientsController',
     resolve: {
       rights: routeResolve.rights
     }
  });