为了在工厂调用中设置我的URL的基础,我需要调用另一个工厂的方法来获取配置。以下内容不断引发Provider 'reportService' must return a value from $get factory method.
错误:
.factory('reportService', ['$resource', 'serverService',
function($resource, serverService) {
serverService.getConfiguration().$promise.then(function(config) {
var base = config.reporting.url;
return $resource(base, {}, {
getReportResults: {method: 'POST', url: base + '/api/reports/:id/versions/:version'}
});
});
}])
Server服务:
angular.module('app')
.factory('serverService', ['$resource',
function($resource) {
var base = '/api/server/';
return $resource(base, {}, {
getConfiguration: {method: 'GET', url: base + 'configuration'}
});
}]);
答案 0 :(得分:1)
您的工厂必须返回某些功能。在reportService
中,您已定义了该函数但未将其返回。
将其更改为以下内容,
.factory('reportService', ['$resource', 'serverService',
function($resource, serverService) {
return {
function_one(): function() {
return serverService.getConfiguration().$promise.then(function(config) {
var base = config.reporting.url;
return $resource(base, {}, {
getReportResults: {method: 'POST', url: base + '/api/reports/:id/versions/:version'}
});
});
}, //add how many ever functions you want by separating with comma
function_two: function() {
// your second function
}
};
}]);
现在,您可以在任何控制器中按如下方式访问所需的功能
reportService.function_one()
.then(function (response) {
// your logic
});
答案 1 :(得分:1)
如果它是factory
方法,它应该返回一个object实例。只有当你require/inject
到另一个组件时才会调用它。
在这种情况下,您的return
位于内部函数内部,因此函数不会返回任何项目。
应该是这样的:
.factory('reportService', ['$resource', 'serverService',
function($resource, serverService) {
var base = config.reporting.url;
function ReportService() {
serverService.getConfiguration().$promise.then(function(config) {
this.resource = $resource(base, {}, {
getReportResults: {method: 'POST', url: base + '/api/reports/:id/versions/:version'}
});
}.bind(this));
}
return new ReportService()
}])
更多解释:
例如:
.factory('message', function () {
return "Hello World!"
}
因此,当它被注入到其他组件时,它将具有返回对象的值。
.controller('something', ['$scope', 'message', function ($scope, message) {}]);
然后消息将具有' Hello World!"
的价值例如:
.factory('message', function () {
http.get(...).then(function (data) {
return "Hello World!"
});
}