Angular $资源 - 将通用.finally函数附加到方法

时间:2014-10-17 22:23:54

标签: angularjs angular-resource

我有一个带有angular的$ resource的通用restful资源。在任何save方法中,我还想在我所处的任何范围上设置消息和布尔值,并为该消息设置超时。所以我的代码中的任何地方都调用.save /.$ save,然后我将.finally附加到它上面(下面)。

我想知道我是否可以将最终写入实际资源本身,而不是将相同的.finally放在我所调用的每个存储上,而不是最终为我的保存函数设置它。


var resource = $resource(
  pageListPath, 
  {}, 
  {
    query: {method:'GET', isArray:true},
    get: {method:'GET', url: pageDetailPath, params:{id:'@id'}, cache:true},
    save: {method:'PUT', url: pageSavePath, params:{id:'@id'}},
    delete: {method:'DELETE', url: pageDetailPath, params:{id:'@id'}}
  }
);

return resource;

    .finally(function() {
      $scope.loading = false;
      $timeout(function() {
        $scope.message = false;
      }, 2500);
    });

理想情况类似

save: {
  method:'PUT', 
  url:pageSavePath, 
  params:{id:'@id'}, 
  finally:function() { doStuff() }}

是我正在寻找的。这可能吗?

1 个答案:

答案 0 :(得分:1)

我最终编写了另一个服务来封装这个服务,为某些响应提供通用功能。

API服务:

pageServices.factory('PageAPI',
  ['$resource', 
  function($resource,
    var resource = $resource(
      pageListPath, 
      {}, 
      {
        query: {
          method:'GET', 
          isArray:true
        },
        get: {
          method:'GET', 
          url: pageDetailPath, 
          params:{ id:'@id' }
        },
        ...,
        ...,
     }
    );

  return resource;

  }]
);

pageServices.factory('Page', ['PageAPI',
  function(PageAPI) {
    var service = {
      'getPages': function() {
        return PageAPI.query(function(response) {
          // Do stuff with success
        }, function(err) {
          // Handle error
        }).$promise.finally(function() {
          // Generic finally handler
        }
      },
      ...,
      ...,
    }
    return service
  }
])