Методы действия службы $Resource Angular.js

Я просматривал документацию по сервису angularJS $Resource и наткнулся на кое-что странное. (https://docs.angularjs.org/api/ngResource/service/$ ресурс)

Есть несколько настраиваемых методов действий, и вы также можете определить свои собственные. Затем эти методы можно вызывать со следующими параметрами:

HTTP GET "class" actions: Resource.action([parameters], [success], [error])
non-GET "class" actions: Resource.action([parameters], postData, [success], [error])

Но затем, позже в примере, метод действия по умолчанию:

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

называется так:

var CreditCard = $resource('/user/:userId/card/:cardId',
  {userId:123, cardId:'@id'}, {
   charge: {method:'POST', params:{charge:true}}
  });

var cards = CreditCard.query(function() {
  // GET: /user/123/card
  // server returns: [ {id:456, number:'1234', name:'Smith'} ];
   var card = cards[0];
   ...
});

Как видите, первым параметром метода запроса является функция обратного вызова успеха (по крайней мере, я так предполагаю), а не параметр [parameters]. Я ожидал:

var cards = CreditCard.query({}, function() { ... });

Я что-то упустил или вы можете просто опустить первый параметр, если он вам не нужен?

Я знаю, что это довольно глупый вопрос, но я хочу убедиться, что я не ошибаюсь здесь...


person ZaphodBBx    schedule 02.08.2014    source источник


Ответы (2)


Скобка [] в Resource.action([parameters], [success], [error]) означает, что эти параметры являются необязательными и могут быть опущены.

Но это не говорит о том, что произойдет, если в качестве параметров будет передан только один обратный вызов, и вы можете подумать:

Будет ли это рассматриваться как [parameters] или [success] или [error], поскольку все они являются необязательными, даже не считая postData для действия без GET.

Я не уверен, упоминается ли это где-нибудь в документации. Но чтобы прояснить ситуацию, давайте изучим исходный код angularjs, и вы найдете точную логику для этого.

https://github.com/angular/angular.js/blob/v1.2.21/src/ngResource/resource.js#L470

А вот и все комбинации, допустимые для запроса GET.

// 4 arguments
params, data, success(), error() 

// 3 arguments
params, data, success()
params, success(), error()

// 2 arguments
params, success()
success(), error()

// 1 argument
success()
params
person runTarm    schedule 02.08.2014

Да, вы можете опустить первый параметр, если не хотите передавать какие-либо параметры в своем запросе. Как указано в документации:

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

Действия HTTP GET «класса»: Resource.action([параметры], [успех], [ошибка])

Обозначение скобки [] подразумевает, что это необязательно, поэтому, если «параметры» не указаны, ожидаемым значением являются обратные вызовы успеха и ошибки.

person ryeballar    schedule 02.08.2014