问题在这里,我有多个API调用:
www.domain.com/foo/bar?token=12345
中间可能有更多的子目录,可能会少一些。
我目前正在使用$ resource
agentApp.factory('apiFactory', function($resource) {
return $resource('www.domain.com/v1/' + ':folder',
{
'query': {
method: 'GET',
isArray: true
}
});
调用如下:
apiFactory.query({folder: 'foo', token: '12345'}, function() {...})
我想让它更具可扩展性,因为我偶尔需要将isArray
值更改为false
,并且URL中的子目录数量有时是未知的,所以我&#39 ; d更喜欢不使用$resource
的{{1}}结构,而只是使用一个字符串。
是否有我可以创建的服务允许我按如下方式拨打电话:
:token
到目前为止,我尝试了以下内容,显然没有给我我想要的内容,我不确定如何获得$资源来实际启动API调用,我把它放了对资源如何运作的基本误解:
apiService.query(urlStringAndQueries, booleanForIsArray).then(function(response) { ...do something with response });
我试图打电话如下:
agentApp.factory('apiService', ['$resource', '$q', function ($resource, $q) {
var factory = {
query: function (urlStringAndQueries, isArray) {
return $q(
function() {
$resource('www.domain.com/v1/' + ':location', { location: urlStringAndQueries }, {
'query': {
method: 'GET',
isArray: isArray
}
});
}
)
},
return factory;
}]);
非常感谢任何帮助和/或建议。 谢谢!
编辑:这是我的解决方案,直到出现更通用的模式
我无法在外部向基本网址字符串提供额外的实体,例如: apiService.query('/foo/bar?token=12345', true)
.then(function(response) { ...do something with response });
,由于foo/bar?token=12345
固有编码网址,因此字符(/?=)会转换为其编码对应项。因此,在模式中分离字符串:
$response
这个解决方案仍然假设我有一定数量的路径,这不是理想的,但至少它很容易重复使用。
仍然接受更多更好的建议:)
答案 0 :(得分:1)
我不明白为什么你再次从你的服务方法返回promise对象,而$ resource返回promise本身。不要那样做
<强>代码强>
agentApp.factory('apiService', ['$resource', '$q', function($resource, $q) {
var factory = {
resourceObj: function(urlStringAndQueries, isArray) {
return $resource('www.domain.com/v1/' + ':location', {
location: urlStringAndQueries
}, {
'query': {
method: 'GET',
isArray: isArray
}
});
)
}
}]);
调用工厂方法,然后您将获得对资源对象的访问权限,然后调用该资源对象方法的query
<强>控制器强>
apiService.resourceObj('/foo/bar?token=12345', true).query()
.then(function(response) { ...do something with response });