これが私がやった方法です。この方法では、エンドポイントごとにカスタム リソース関数を記述する必要はなく、リスト リソース リストに追加するだけです。このように使用したいエンドポイントのリストを定義しました。
var constants = {
"serverAddress": "foobar.com/",
"resources": {
"Foo": {
"endpoint": "foo"
},
"Bar": {
"endpoint": "bar"
}
}
}
次に、このようにそれぞれからリソースを作成しました。
var service = angular.module('app.services', ['ngResource']);
var resourceObjects = constants.resources;
for (var resourceName in resourceObjects) {
if (resourceObjects.hasOwnProperty(resourceName)) {
addResourceFactoryToService(service, resourceName, resourceObjects[resourceName].endpoint);
}
}
function addResourceFactoryToService (service, resourceName, resourceEndpoint) {
service.factory(resourceName, function($resource) {
return $resource(
constants.serverAddress + resourceEndpoint + '/:id',
{
id: '@id',
},
{
update: {
method: 'PUT',
params: {id: '@id'}
},
}
);
});
}
これの良いところは、新しいエンドポイントを追加するのに 2 秒かかることです。次に、このように任意のリソースをコントローラーに注入できます。
.controller('homeCtrl', function($scope, Foo, Bar) {
$scope.foo = Foo.query();
$scope.bar = Bar.get({id:4});
}