Строка запроса в $resource url
моя служба должна использовать строку запроса из-за ограничений на сервере, который запускает классический ASP:
angular
.module('myServices', ['ng', 'ngResource'])
.factory('Item', ['$resource',
function ($resource) {
return $resource('/api/?p=item/:id');
}]);
и я хочу добавить к нему дополнительные параметры строки запроса:
Item.query({test: 123}, on_success, on_error);
но полученный URL-адрес
/api/?p=item?test=123
По-видимому, есть ошибка, но как обойти ее?
EDIT: зарегистрировано в https://github.com/angular/angular.js/issues/1511
Ответы
Ответ 1
Вы можете использовать параметры ресурсов. Если вы не указали заполнители в пути, они автоматически преобразуются в параметры строки запроса. Например:
angular
.module('myServices', ['ng', 'ngResource'])
.factory('Item', [
'$resource',
function ($resource) {
return $resource('/api');
}]);
Item.query({p: 'item/1'});
Это приведет к запросу /api?p=item/1
.
P.S.
Я полагаю, вы уже знаете это, но вам это не нравится. Но я все еще думаю, что это правильный путь в вашем случае. Учитывая плохой дизайн API, вы имеете дело с этим контентом, вы можете обернуть ресурсы AngularJS другой службой, которая сделает это за вас.
Ответ 2
var deferred = $q.defer();
api.api_name.query({
'param':param_value
},
function(response) {
deferred.resolve(response);
},
function(response) {
deferred.reject(response);
}
);
//
angular
.module('module_name')
.factory('api',function($resource){
var api_var={};
api_var.api_name = $resource('url?param_key=:param', {
param: '@param'
}, {
'query': {
method: 'get'
}
});
return api_var;
});