0

У меня есть 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 gameResource = $resource('/api/Games/:id/:action', { id: '@id', action: '@action' }, 
    { 
     getQuestions: { method: 'GET', isArray: true, params: { action: 'Questions'} 
    }, 

);  

Однако я застрял после этого момента. В идеале, я бы хотел, чтобы метод getAnswers возвращал объект из другого ресурса (новый questionResource), а затем, в свою очередь, имел метод $ getAnswers, возвращающийся с ресурса ответов. Цель состоит в том, чтобы сохранить методы в реальном ресурсном объекте, а не извлекать их на отдельный вызов фабрики/службы.

Кроме того, я хотел бы иметь возможность запросить конкретный вопрос из репозитория. Что-то вроде этого:

var game = gameRepository.get(17); 
var question = game.$getQuestion(1); 

Насколько я могу сказать, что нет никакого способа, чтобы передать конкретный параметр для пользовательского действия $ ресурсов, как я их использую.

Может ли кто-нибудь указать мне в правильном направлении? Благодаря!

ответ

0

Это оказалось проще, чем я думал.

Функция $ resource создает функцию, в которой все объекты, возвращаемые из ресурса, наследуются. В результате вы можете сделать что-то вроде этого:

gameResource.prototype.$getQuestion = function(id){ ... }