这是关于ngResource的助手的另一个示例。它依赖于这样的事实,即绝大多数服务都是类似于以下内容:
http://host/api/posts
http://host/api/posts/123
http://host/api/posts/123/comments
http://host/api/posts/123/comments/456
因此,任务是创建一个辅助工具,它可以创建 AngularJS 资源对象,并映射到这些服务。下面是代码:
'use strict';
var api = angular.module('api', ['ngResource']);
api.addService = function (serviceNameComponents) {
var serviceName = "";
var resource = "/api";
var params = {};
serviceNameComponents.forEach(function (serviceNameComponent) {
serviceName += serviceNameComponent;
var lowerCaseServiceNameComponent = serviceNameComponent.toLowerCase();
var collection = lowerCaseServiceNameComponent + 's';
var id = lowerCaseServiceNameComponent + 'Id';
resource += "/" + collection + "/:" + id;
params[id] = '@' + id;
});
this.factory(serviceName, ['$resource',
function ($resource) {
return $resource(resource, {}, {
query: {
method: 'GET',
params: params,
isArray: true
},
save: {
method: 'POST',
},
update: {
method: 'PUT',
params: params,
},
remove: {
method: 'DELETE',
params: params,
}
}
);
}
]);
}
所以,要使用它只需调用这个帮助程序
api.addService(["Post"]);
api.addService(["Post", "Comment"]);
然后您可以在代码中使用Post和PostComment,并像这样使用所需的参数:post_id。