Angularjs $resource-ngResource的正确配置

Angularjs $resource-ngResource的正确配置,angularjs,repository-pattern,angular-resource,ngresource,Angularjs,Repository Pattern,Angular Resource,Ngresource,我的应用程序中有3个对象:游戏、问题和答案 这些类的配置如下: class Game{ id; Question[] questions; } class Question{ id; text; Answer[] answers; } class Answer{ id; text; } 我正在尝试正确配置ngResource以处理此类设置。理想情况下,我希望实现的目标如下: app.factory('gameRepository', fu

我的应用程序中有3个对象:游戏、问题和答案

这些类的配置如下:

class Game{
   id;
   Question[] questions;
}

class Question{
    id;
    text;
    Answer[] answers;
}

class Answer{
    id;
    text;
}
我正在尝试正确配置ngResource以处理此类设置。理想情况下,我希望实现的目标如下:

app.factory('gameRepository', function($resource){
    var gameResource = $resource('/api/Games/:id', { id: '@id' });    

    return {
        get: function(id){ return gameResource.get({id: id}); }
    };
});

app.controller('myController', function(gameRepository){
     var game = gameRepository.get(17);
     var questions = game.$getQuestions();
     var answers = questions[0].$getAnswers();
});
var game = gameRepository.get(17);
var question = game.$getQuestion(1);
gameResource.prototype.$getQuestion = function(id){ ... }
我知道,通过这样做可以实现其中一些目标:

var gameResource = $resource('/api/Games/:id/:action', { id: '@id', action: '@action' },
    {
        getQuestions: { method: 'GET', isArray: true, params: { action: 'Questions'}
    },

);    
然而,在这一点之后,我陷入了困境。理想情况下,我想做的是让$getAnswers方法从不同的资源(新的questionsResource)返回一个对象,然后再让$getAnswers方法从answers资源返回。这里的目标是将方法保留在实际的资源对象上,而不是将它们提取到单独的工厂/服务调用中

此外,我希望能够从存储库中请求一个特定的问题。大概是这样的:

app.factory('gameRepository', function($resource){
    var gameResource = $resource('/api/Games/:id', { id: '@id' });    

    return {
        get: function(id){ return gameResource.get({id: id}); }
    };
});

app.controller('myController', function(gameRepository){
     var game = gameRepository.get(17);
     var questions = game.$getQuestions();
     var answers = questions[0].$getAnswers();
});
var game = gameRepository.get(17);
var question = game.$getQuestion(1);
gameResource.prototype.$getQuestion = function(id){ ... }
据我所知,没有办法像我使用$resource自定义操作那样将特定参数传递给它们


谁能给我指出正确的方向吗?谢谢

这比我想象的要容易得多

$resource函数创建一个函数,所有从资源返回的对象都将继承该函数。因此,您可以执行以下操作:

app.factory('gameRepository', function($resource){
    var gameResource = $resource('/api/Games/:id', { id: '@id' });    

    return {
        get: function(id){ return gameResource.get({id: id}); }
    };
});

app.controller('myController', function(gameRepository){
     var game = gameRepository.get(17);
     var questions = game.$getQuestions();
     var answers = questions[0].$getAnswers();
});
var game = gameRepository.get(17);
var question = game.$getQuestion(1);
gameResource.prototype.$getQuestion = function(id){ ... }