$ resource service:" class"的参数和"实例"方法

时间:2014-05-10 19:47:08

标签: angularjs

oficial docs中没有任何关于回调函数的文章。

我有服务:

angular.module('myApp')
  .factory('Thing', ['$resource',
    function ($resource) {
      return $resource('/api/things/:id', { id: 'all' }, {} );
    }
  );

我有控制器:

angular.module('myApp')
  .controller('ThingCtrl', ['$scope', '$location', '$routeParams', 'Thing',
    function ($scope, $location, $routeParams, Thing) {

      Thing.get({id: $routeParams.thingId}, function(thing) {
        // This callback i found in example
        $scope.thing = thing;
      });

      $scope.save = function() {
        Thing.save({id: $scope.thing._id}, $scope.thing, function() {
          // This callback i found using brute force. It run when respond OK (200)
        });
      };
    }
  ]);

我想了解如何使用此回调。 我想知道这回调是什么。

任何人都可以帮助我吗?

P.S。抱歉,如果我的英语不好......

1 个答案:

答案 0 :(得分:1)

在深入研究源代码(版本1.2.16)之后,事实证明每个实例方法最多可以接收3个参数:

  1. [可选]参数,例如({id: 'some-ID'})。
  2. [可选]成功回调。
  3. [可选]错误回调。
  4. 一旦谐振到来,就会调用成功/错误回调。


    回调接收以下参数:

    • 成功回拨: 一个。对象(例如thing)。 湾标题getter函数。

    • 错误回调: 一个。对象(例如thing)。


    如果您仔细阅读文档,您将能够在那里找到它:

      

    值得注意的是,get,query和其他方法的成功回调在来自服务器的响应中传递,以及$ http header getter函数[...]:

    var User = $resource('/user/:userId', {userId:'@id'});
    User.get({userId:123}, function (user, getResponseHeaders) {
        user.abc = true;
        user.$save(function (usr, putResponseHeaders) {
            //usr => saved user object
            //putResponseHeaders => $http header getter
        });
    });
    

    <强>更新

    资源与资源实例之间存在重要(并非如此明显)的区别。

    通过调用$resource服务返回资源对象 通过调用资源对象的方法返回资源实例对象。

    澄清一下,在这个例子中:

    var User = $resource('/user/:userId', {userId:'@id'});
    var user = User.get({userId:123});
    
    • User是资源对象(因为它是通过调用$resource(...)返回的)。
    • user是一个资源实例对象(因为它是通过调用资源对象的.get()方法返回的,即{{} 1}})。

    现在,资源对象对定义中的每个操作都有“静态”方法。
    rsource 实例对象_是资源类型的一个实例,所有非GET方法都可以使用$ prefix _。

    换句话说,User class )有静态方法Userget()save()等。 而delete() instance )具有前缀非GET方法,例如user$save()等(但不是$delete()或`$ query())。

    非静态方法接收我前面描述的参数 静态GET方法也接收相同的参数(如前所述) 静态非GET方法接收额外的参数,即要发布的数据,即要对其执行的实例对象。

    所以,这两个电话是相同的:

    $get()

    更新2

    只有在为时已晚之后,才发现文档中已经清楚地描述了方法参数:

      

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

    • HTTP GET“类”操作:user.$save(params, success, error); // <-- non-static method User.save(params, user, success, error); // <-- static method
    • 非GET“类”操作:Resource.action([parameters], [success], [error])
    • 非GET实例操作:Resource.action([parameters], postData, [success], [error])
      

    使用(instance.$action([parameters], [success], [error])value)参数调用成功回调   使用(responseHeaders)参数调用错误回调。

         

    类操作返回空实例(下面有其他属性)   实例操作会返回操作的承诺。