Как передать строку запроса в URL-адресе с помощью PUT или POST в массиве?

Я пытаюсь обновить список элементов, используя службу angular $resource:

.factory('Elements', ['$resource', function($resource) {
    return $resource('../api/:type/:id', 
        {   type:'@type', id:'@id' }, 
        {   update: { method: 'PUT' }, 
            updateList: { method: 'PUT', isArray: true }
        });
    }])

1 внутри контроллера эта функция обновляет один объект:

element.update({ 'name': name, 'value': value }); 

Он отправляет HTTP-запрос PUT на сервер с этим URL-адресом: /api/theType/theId?name=theName&value=theValue. Это работает нормально.

2 Теперь вместо одного объекта эта функция обновляет массив объектов, используя метод updateList:

elements.updateList({ 'name': name, 'value': value }); 

проблема:

В этом случае запрошенный URL-адрес — /api/theType. Но почему строки запроса (name=theName&value=theValue) здесь больше нет?

Как передать строку запроса в URL-адресе при обновлении массива с помощью PUT?


person François Romain    schedule 09.03.2014    source источник


Ответы (1)


Оба вызова, вероятно, сломаны, и вы этого не знаете. В текущем состоянии вы просто обновляете сервер с помощью объекта параметров вместо реальных данных.

При передаче одного объекта в действиях, отличных от GET, он передается как данные для обновления. Из документов:

Методы действия над объектом класса или объектом экземпляра могут быть вызваны со следующими параметрами:

...

  • действия "класса" без GET: Resource.action([parameters], postData, [success], [error])

Так что это просто неправильное использование метода действия. Отправьте объект данных для обновления после параметров действия, и все готово:

element.update({ 'name': name, 'value': value }, dataObject);

Источник

$resource в документации по AngularJS

person Eliran Malka    schedule 09.03.2014