创建Angular工厂后修改它?

时间:2017-03-14 08:09:20

标签: angularjs

我有一个创建的ngResource工厂:

angular
    .module("app")
    .factory("versionResource", versionResource);

function versionResource($resource) {
    return $resource("api/versions/:versionId",
        {
            versionId: "@versionId"
        }
    );
}

此代码是为我自动生成的。我想扩展版本资源,以便有一个.create函数。这可以通过修改代码来完成:

function versionResource($resource) {
    return $resource("api/versions/:versionId",
        {
            versionId: "@versionId"
        },
        {
            create: {
                method: "POST",
                url: "api/versions/create"
            }
        }
    );
}

但是,由于初始代码是自动生成的,因此会不时被覆盖。我想以某种方式延长工厂。类似的东西:

angular
    .module("app")
    .run(run);

function run(versionResource) {
    versionResource.create = {
                method: "POST",
                url: "api/versions/create"
            };
}

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

Decorators可能有用。请参阅以下示例:

angular.module('app', [])

.config(['$provide', function($provide) {

  $provide.decorator('$resource', ['$delegate',
    function myServiceDecorator($delegate) {
      return function decoratedResource() {
        var url = arguments[0].split('/').slice(0,2).join('/');
        arguments[2].create = {
          method: "POST",
          url: url + "/create"
        };
        return $delegate.apply(this, arguments);
      };
    }
  ]);

}]);

Here是一个工作小提琴。打开开发人员工具网络选项卡并运行它。您将看到成功的创建帖子。