所以我有一组看起来很相似的工厂。我可能想创建一个通用函数来减少重复代码。
代码示例:
.factory('neQueryService', function ($http, $resource, constants) {
return $resource(constants.GEODATA_QUERY, {},
{
get: {
method: 'GET',
transformResponse: function(data, headers, status){
var response = {};
response.data = data;
response.headers = headers();
response.status = status;
return response;
}
}
}
);
和
.factory('neTaskService', function ($http, $resource, constants) {
return $resource(constants.GEODATA_TASK, {},
{
get: {
method: 'GET',
transformResponse: function(data, headers, status){
var response = {};
response.data = data;
response.headers = headers();
response.status = status;
return response;
}
}
}
);
如您所见,从“获取”到“返回”的所有内容在工厂中都是相同的。是否有一种聪明的“最佳实践”方法可以将该部分放入一个单独的函数中,并在所有工厂中仅引用它?
最佳答案
您可以为此使用 value()
提供程序,因为它没有任何外部依赖项:
.value('resourceConfig', {
get: {
method: 'GET',
transformResponse: function(data, headers, status){
var response = {};
response.data = data;
response.headers = headers();
response.status = status;
return response;
}
}
});
.factory('neQueryService', function ($http, $resource, constants, resourceConfig) {
return $resource(constants.GEODATA_QUERY, {}, resourceConfig);
});
.factory('neTaskService', function ($http, $resource, constants, resourceConfig) {
return $resource(constants.GEODATA_TASK, {}, resourceConfig);
});
或者您可以更进一步,分解出一个工厂来创建您的资源:
.factory('prepareResource', function ($resource) {
return function (query) {
return $resource(query, {}, {
get: {
method: 'GET',
transformResponse: function(data, headers, status){
var response = {};
response.data = data;
response.headers = headers();
response.status = status;
return response;
}
}
});
};
});
.factory('neQueryService', function (prepareResource, constants) {
return prepareResource(constants.GEODATA_QUERY);
});
.factory('neTaskService', function (prepareResource, constants) {
return prepareResource(constants.GEODATA_TASK);
});
关于javascript - 通用工厂/服务以避免 Angular 中的重复代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41873765/