我有一个创建的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"
};
}
有什么想法吗?
答案 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是一个工作小提琴。打开开发人员工具网络选项卡并运行它。您将看到成功的创建帖子。