【问题标题】:Angular.js $Resource service action methodsAngular.js $Resource 服务操作方法
【发布时间】:2014-08-02 20:30:24
【问题描述】:

我在浏览 angularJS $Resource 服务文档时遇到了一些奇怪的事情。 (https://docs.angularjs.org/api/ngResource/service/$resource)

有一些自定义的操作方法,您也可以定义自己的。然后,可以使用以下参数调用这些方法:

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() { ... });

我是否遗漏了什么,或者如果你不需要第一个参数,你可以简单地省略它吗?

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

【问题讨论】:

    标签: angularjs rest parameters optional-parameters


    【解决方案1】:

    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
    

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2013-09-16
        • 2013-06-24
        • 2014-12-14
        • 1970-01-01
        • 2016-02-03
        • 1970-01-01
        • 2013-10-09
        • 2016-09-27
        • 1970-01-01
        相关资源
        最近更新 更多