gpt4 book ai didi

angularjs - 如何从两个不同的 REST API 修改 Angular 中 $resource 的结果

转载 作者:可可西里 更新时间:2023-11-01 10:28:51 26 4
gpt4 key购买 nike

我有两个 REST API 需要使用:一个来自 Mongolab 用于开发目的,另一个来自目前无法访问的实际 API。问题是 ID 在这些中的处理方式有点不同,对象结构也不同。 Mongo 使用 object._id.$oid 表示法和实际的 API object.ID 表示法。 Mongolab 资源是:

app.factory('Items', function ($resource) {
var items = $resource('https://api.mongolab.com/api/1/databases/x/collections/items/:id',
{
apiKey:'x',
id:'@_id.$oid'
}
});
return items;
});

和查询调用(当前使用):

$scope.items = Items.query({}, function () {
if (API == 'Mongo') {
angular.forEach($scope.items, function(item) {
item.ID = item._id.$oid;
});
};
});

我希望能够轻松切换不同的 API,而无需修改每个查询调用或链接中的代码(我有数十个调用和链接具有资源 ID)。所以我想将 API == 'Mongo' 检查移至上层:我尝试在创建 的工厂中直接使用 forEach ID 更改Items 资源,但它不是那样工作的。如何在通过 query 填充结果之前直接修改结果?

或者我应该为不同的 API 创建不同的分支?

最佳答案

我认为您可以只添加两个不同的工厂,然后根据“API”变量的值查询您需要的工厂。

app.factory('ItemsApi', function ($resource) {
var items = $resource('https://api.mongolab.com/api/1/databases/x/collections/items/:id',
{
apiKOey:'x',
id:'@_id.$oid'
}
});
return items;
});
app.factory('ItemsMongo', function ($resource) {
var items = $resource('https://api.mongolab.com/api/1/databases/x/collections/items/:id',
{
apiKey:'x',
id:'@id'
}
});
return items;
});

然后在 Controller 中(而不是在资源工厂中)你可以使用:

if (API == 'Mongo') 
$scope.items = ItemsApi.query();
else
$scope.items = ItemsMongo.query();

更新:

如果这是您目前拥有的,那么您可能需要考虑为返回数组中的每个元素添加一个额外的属性。您可以通过覆盖默认的工厂 query() 方法然后遍历每个元素添加一个重复的 ID 字段来实现这一点。检查一下:

$resource('https://../:id',{id: '@id'}, {
query: {
isArray: true,
method: 'GET',
params: {},
transformResponse: function (data) {
var wrapped = angular.fromJson(data);
angular.forEach(wrapped, function(item) {
--do something to wrapped items --
});
return wrapped;
}
}

transformResponseangular.forEach 应该可以解决问题

关于angularjs - 如何从两个不同的 REST API 修改 Angular 中 $resource 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30045111/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com