Javascript 将工厂注入另一个角工厂
为了在工厂调用中设置url的基础,我需要调用另一个工厂的方法来获取配置。下面不断抛出一个Javascript 将工厂注入另一个角工厂,javascript,angularjs,Javascript,Angularjs,为了在工厂调用中设置url的基础,我需要调用另一个工厂的方法来获取配置。下面不断抛出一个提供程序“reportService”必须从$get factory方法返回一个值。错误: .factory('reportService', ['$resource', 'serverService', function($resource, serverService) { serverService.getConfiguration().$promise.then(function(con
提供程序“reportService”必须从$get factory方法返回一个值。
错误:
.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'}
});
}]);
您的工厂必须返回一些功能。在您的
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
});
如果它是
工厂
方法,它应该返回对象的实例。只有当您需要/注入它到另一个组件时,它才会被调用
在这种情况下,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()
}])
更多解释:
工厂应该返回一个对象
例:
所以,当它被注入另一个组件时,它将有一个返回对象的值
.controller('something', ['$scope', 'message', function ($scope, message) {}]);
然后消息将具有“你好,世界!”!"
内部函数中的返回不计算在内
例:
我们可以看到serverService的代码吗?当我在该函数前面添加return
时,我在IDE中得到一个表达式或预期的逗号
警告和一个未知的提供程序:reportServiceProvider@MattDionis我犯了一个语法错误。你能检查我编辑过的答案吗?运行上述函数时,我得到reportService.getReportResults不是一个函数。注意:我把var base=config.reporting.url;
移到了serverService.getConfiguration
中。你需要像reportService.resource.getReportResults.getReportResults>那样调用它。你能解释一下getConfiguration做什么吗?我想如果它是一个配置,你可以把它放到一个javascript文件中,然后导入它,而不是ca像那样异步。
.controller('something', ['$scope', 'message', function ($scope, message) {}]);
.factory('message', function () {
http.get(...).then(function (data) {
return "Hello World!"
});
}