Как связаться с нестандартным API с помощью Angular ngResource
API, который я использую, требует нестандартного предложения where, если я пытаюсь найти конкретное поле без идентификатора. Конечная точка мне нужна:
http://127.0.0.1:4001/api/testusers/findOne?userName=Anton
Так что я найду первую запись в таблице testusers, столбец которой (userName) = 'Anton'.
Мой стандартный сервис:
angular.
module('shared.testUser').
factory('TestUser', ['$resource',
function($resource) {
return $resource('http://127.0.0.1:4001/api/testusers/:id', {id:'@id'},//parameters
{
update: {
method: 'PUT' // To send the HTTP Put request when calling this custom update method.
}
});
}
]);
и моя вызывающая функция:
self.checkUsersEntryDirection = function(){ //NOT WORKING
self.testuser = TestUser.get({ username: 'anton' }, function() {
console.log(angular.toJson(self.testuser));
}); // get() returns a single entry
}
Ясно, что это не работает, и я не могу использовать стандартный подход get. Кто-нибудь может подумать, как этого можно достичь?
2 ответа
Вы могли бы создать вторичную фабрику TestUserByName
и внесите следующие изменения:
angular.
module('shared.testUser').
factory('TestUserByName', ['$resource',
function($resource) {
return $resource('http://127.0.0.1:4001/api/testusers/findOne?userName:username', null,
{
update: {
method: 'PUT' // To send the HTTP Put request when calling this custom update method.
}
});
}
]);
Позвоните get
метод действия с двумя параметрами:
var params = {id: "findOne", username: "anton"};
self.checkUsersEntryDirection = function(){
self.testuser = TestUser.get(params, function() {
console.log(angular.toJson(self.testuser));
}); // get() returns a single entry
}
id
параметр переопределит значение по умолчанию и username
Параметр будет добавлен в виде строки запроса.
Из документов:
Каждое значение ключа в объекте параметра сначала привязывается к шаблону URL, если он присутствует, а затем любые лишние ключи добавляются к поисковому запросу URL после символа?.
Учитывая шаблон
/path/:verb
и параметр{verb:'greet', salutation:'Hello'}
результаты в URL/path/greet?salutation=Hello
,