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

时间:2016-03-16 05:26:09

标签: javascript angularjs

此代码可以正常工作:

$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的新手。怎么做对了?

1 个答案:

答案 0 :(得分:3)

您可以尝试以下方法,我已在我的应用中使用过这种方法。

在路线上方创建一个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
     }
  });