Как отправить некоторые параметры с помощью POST, а некоторые с помощью GET в $ ng-resource в Angularjs

0

У нас есть эта служба, использующая ng-resource:

var app = angular.module('salonesbelleza', []);
app.service("CentroBorrar_srv", function ($resource, UrlBaseApi_srv) {
return{

        return $resource('wa-centros/:id',
            {id:'@id', access_token:'@access_token'},
            { "post": { method: "DELETE",
                isArray: false,
                headers: {
                    'Accept': 'application/json; q=1.0, */*; q=0.1',
                    'Content-Type':'application/json'
                }
            }}
        );

}

});

В контроллере Мы используем этот способ

var CentroBorrar_data = CentroBorrar_srv.post({
            id:10,
            othervar1:'VALUE_1',
            othervar1:'VALUE_2',
            access_token:'MY TOKEN'
        });

С помощью этого ng-ресурса Мы удаляем элемент с id = 10, используя некоторые дополнительные вары, такие как acces_token

Эта работа очень хорошо. И это URL-адрес, сгенерированный этим ng-ресурсом

wa-centros/10?access_token=MY_TOKEN&othervar1=VALUE_1&othervar2=VALUE_2

Все vars отправляются с использованием GET в URL. Но мы хотим отправить некоторые вары, используя POST и другие, используя GET. Например, мы хотим отправить othervar1 и othervar2 с помощью POST.

Есть ли способ Мы можем принудительно определить определение ресурса ng, которое var в контроллере должно быть отправлено POST и которое должно быть отправлено с использованием GET

Я чувствую себя потерянным по этому поводу

заранее большое спасибо

Теги:
ngresource

1 ответ

0

Да, можно добавить параметры. Вы должны объявить для этого пользовательское действие. Существует два способа создания пользовательского действия с типом "не-GET" (взятым из угловой документации):

  1. не-GET-действия класса: Resource.action([parameters], postData, [success], [error])
  2. действия не-GET: экземпляр. $ action ([параметры], [успех], [ошибка])

Как я вижу, вы используете первый, а именно не-GET-класс. На основе вашего примера вы должны иметь что-то вроде этого:

return $resource('rest-link/:id',
            {id:'@id', access_token:'@access_token'},
            { "yourCustomActionNameHere": { method: "POST",
                isArray: false,
                headers: {
                    'Accept': 'application/json; q=1.0, */*; q=0.1',
                    'Content-Type':'application/json'
                },
                params : {yourParam1 : val}
            }}
        );

Обратите внимание, что параметры добавлены в действие вашего ресурса, а именно yourParam1. Как я уже упоминал ранее, это действие класса "не-GET", что означает, что вы также передаете объект данных. Вы должны принять это во внимание при вызове своего ресурса следующим образом:

<YourResourceNameHere>.yourCustomActionNameHere({yourParam1: 12}, dataObject)

Вам следует позаботиться о параметрах, а именно параметрах по умолчанию. В случае не-GET- метода, такого как ваш, не предоставляющий значение параметра paramName, означает, что поиск будет продолжаться до свойств объекта, определенных вами в вашем dataObject отправленного методу POST, ища пару name-value где name то же самое с вашим paramName.


Вы должны взглянуть на методы экземпляра, они проще использовать, на мой взгляд, и обеспечивают большую гибкость и удобочитаемость. Например, вы могли бы позвонить как CentroBorrar.$save({param: val}) для действия POST, где CentroBorrar является экземпляром и будет содержать объект данных. (здесь короткий пример). Надеюсь, это поможет.

  • 0
    Большое спасибо за всю эту информацию. Не могу дождаться, чтобы применить на практике, а затем дать вам знать, конечно, это много значит, потому что есть много новой информации, которую я не знал о ngresources
  • 0
    Еще нужно что-то решить. В вашем примере создайте пользовательское действие и установите метод POST. Таким образом, вы можете получить переменные по POST. Но мне нужно использовать метод DELETE, потому что это действие требует моего сервера, и моя проблема заключается в том, что ngresource отправляет все параметры с помощью GET. Но бэк-энду нужно, чтобы я послал несколько параметров с помощью Get, а некоторые - с помощью POST в одном действии. Это возможно? Могу ли я указать в действии ресурса, переменные должны идти по POST и по GET. Например, используя действие DELETE.
Показать ещё 6 комментариев

Ещё вопросы

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