사용해야하는 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
. Items
리소스를 생성하는 공장에서 직접 ID 변경을 시도 했지만 그렇게 작동하지 않습니다. 결과가 채워지기 전에 직접 결과를 수정하려면 어떻게해야 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;
});
그런 다음 리소스 팩토리 대신 컨트롤러에서 다음을 사용할 수 있습니다.
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;
}
}
transformResponse 및 angular.forEach 가 트릭을 수행해야합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다