再舉一個例子。這依賴於事實是,絕大多數的服務是類似的東西:
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']);
// RESTful API helper
api.addService = function (serviceNameComponents) {
var serviceName = "";
var resource = "/api"; // Root for REST services
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"]);
然後你就可以在代碼中包含所需的PARAMS使用郵政和PostComment:POST_ID
這聽起來像你想要某種角度支持的模型框架。據我所知,在內置的角度上沒有這樣的東西。 – thalador 2013-04-24 09:21:18
@thalador - 我正在尋找甚至只是聽到最好的做法,如何去建立自己的。我應該用一個服務包裝一個「資源」對象並添加方法嗎?用一個單獨的服務包裝一個「資源」對象?等等。 – 2013-04-24 12:20:42