为了在工厂调用中设置我的网址的基础,我需要调用另一个工厂的方法来获取配置。下面不断抛出 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'}
});
});
}])
服务器服务:
angular.module('app')
.factory('serverService', ['$resource',
function($resource) {
var base = '/api/server/';
return $resource(base, {}, {
getConfiguration: {method: 'GET', url: base + 'configuration'}
});
}]);
最佳答案
如果它是一个工厂
方法,它应该返回一个对象的实例。仅当您需要/注入(inject)
它到另一个组件时才会调用它。
在这种情况下,您的返回
位于内部函数内部,因此该函数不会返回任何项目。
应该是这样的:
.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!"
}
因此,当它被注入(inject)到另一个组件时,它将具有返回对象的值。
.controller('something', ['$scope', 'message', function ($scope, message) {}]);
那么消息的值为“Hello World!”
- 内部函数的返回不计算在内。
例如:
.factory('message', function () {
http.get(...).then(function (data) {
return "Hello World!"
});
}
关于javascript - 将工厂注入(inject)另一个 Angular 工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38374849/