在$ routeProvider解析功能中找不到AngularJS声明的服务

时间:2018-02-11 02:00:58

标签: javascript angularjs

我的主JS中有以下AngularJS代码(LoginData是全局值,Config是工厂实例):

app.service('portfolioData', function($http, LoginData, Config) {
return {
    load: function( $http, LoginData, Config ) {
        return $http({
            method: 'GET',
            url: getHostnamePort(Config) + '/rest/api/property/list',
            headers: { 
                'Content-Type': 'application/json',
                'x-api-token': LoginData.apiToken,
                'x-api-user': LoginData.apiUser
            }
        }).then( function successCallback( response ) {
            console.log( "Portfolio loaded" );
            return response.data;
        }, function errorCallback ( response ) {
            console.log( "Portfolio load FAILED" );
            console.log( response.status );
            if ( response.status == '401' )
                $scope.failureMessage = "Unauthorised. Please Login in.";
            return null;
        });
    }
};
});

再往下我宣布了我的路线:

app.config(function ($routeProvider) {
    ...
    $routeProvider.when('/portfolio', {templateUrl: "http://xxxxx/~matthew/view/portfolio.view", resolve: { portfolio: portfolioData.load( $http, LoginData, Config ) }});
});

由于某些原因,AngularJS无法找到portfolioData服务,因此无法运行该应用程序。

我尝试过使用工厂。 如果我内联$ http调用似乎有效,但我不想内联这段代码,因为它很重要,我希望在其他地方重用它。

enter image description here

2 个答案:

答案 0 :(得分:1)

首先,您无需将服务作为函数加载的参数传递:

load: function() {
    return $http({...}).then...
}

然后,我认为解决方案的portfolio属性需要一个函数,如:

resolve: { 
    portfolio: function(portfolioData) {
         return portfolioData.load();
    }
}

或已解决:

resolve: { 
    portfolio: function(portfolioData) {
         return portfolioData.load().then(function (data) {
              return data;
         });
    }
}

答案 1 :(得分:1)

您是否在配置之前加载了服务脚本?如果不这样做。