Как передать массив параметров запроса, используя Angular $ resource

0

Я пытаюсь включить функцию, в которой пользователи могут быть найдены на основе нескольких тегов (массив тегов), используя следующую структуру:

GET '/tags/users?tag[]=test&tag[]=sample'

Я работаю над своим узловым сервером и успешно протестировал его с помощью Postman. Проблема, с которой я сталкиваюсь, заключается в том, как структурировать этот GET в моей службе Angular, используя $resource. Я нашел документацию для $http о том, что добавление params:{'tag[]': tag} в объект запроса будет делать трюк, но не может найти что-либо в отношении $resource.

  • 0
    Вы смотрели в $ location и search ()? docs.angularjs.org/api/ng/service/$location
  • 0
    Просто посмотрел, спасибо. Я вообще не меняю местоположение, я просто возвращаю список результатов на текущей странице.
Теги:
angular-resource

1 ответ

2
Лучший ответ

В угловом выражении вы можете передать массив в виде строки запроса, используя $resource

В контроллере:

    angular.module('myApp').controller('userController',['$scope','userService', '$location',
        function($scope, userService, $location){
            $scope.searchQuery = {};

            $scope.SearchUsers = function() {
                $scope.roles = ['admin', 'register', 'authenticate'];
                $scope.searchQuery.name ='xxx';
                $scope.searchQuery['roles[]'] = $scope.roles;
                userService.searchUsers($scope.searchQuery)
                    .$promise.then(function (response) {
                        $scope.users = response.users;
                    });
            };
       }
   ]);

В сервисе:

    angular.module('myApp').factory('userService', ['$resource',
  function($resource) {

    return {
        searchUsers: function(searchQuery){
            var searchRequest = $resource('/auth/search/user', {}, {
                'get': {method: 'GET'}
            });
            return searchRequest.get(searchQuery);
        }
    };
  }
]);

URL запроса:

/auth/search/users?name=xxx&roles%5B%5D=admin&roles%5B%5D=register&roles%5B%5D=authenticate

вы получаете %5B%5D вместо [] в своем запросе url

и если вы ожидаете вернуть array вместо object тогда вы должны использовать

'get': {method: 'GET', isArray: true}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню