Как связаться с нестандартным 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,

- Справочник по API службы AngularJS ngResource $ resource

Другие вопросы по тегам