我的主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调用似乎有效,但我不想内联这段代码,因为它很重要,我希望在其他地方重用它。
答案 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)
您是否在配置之前加载了服务脚本?如果不这样做。