Angular.js $ Resource服务操作方法

时间:2014-08-02 11:55:14

标签: angularjs rest parameters optional-parameters

我正在浏览angularJS $资源服务文档,我遇到了一些奇怪的事情。 (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() { ... });

我是否遗漏了某些内容,或者如果您不需要,可以省略第一个参数吗?

我知道这是一个愚蠢的问题,但我想确保我在这里没有弄错...

2 个答案:

答案 0 :(得分:0)

是的,如果您不想在请求中传递任何参数,则可以省略第一个参数。如文档中所述:

  

类对象或实例对象上的操作方法可以是   使用以下参数调用:

     

HTTP GET“class”操作:Resource.action([parameters],[success],   [错误])

[]括号表示它是可选的,因此如果未提供“参数”,则预期值为成功和错误回调。

答案 1 :(得分:0)

[]中的Resource.action([parameters], [success], [error])括号表示这些参数是可选的,可以省略。

但是,如果只有一个回调作为参数传递,那么这并不能说明会发生什么:

是否会将其视为[parameters][success][error],因为这些都是可选的,甚至不计算非{GET操作的postData。< / p>

我不确定文档中是否有任何提及。但是为了清理,让我们探索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