我正在浏览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() { ... });
我是否遗漏了某些内容,或者如果您不需要,可以省略第一个参数吗?
我知道这是一个愚蠢的问题,但我想确保我在这里没有弄错...
答案 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