【问题标题】:$resource - proper configuration for ngResource$resource - ngResource 的正确配置
【发布时间】:2016-02-27 08:32:56
【问题描述】:

我的应用程序中有 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 方法从不同的资源(一个新的 questionsResource)返回一个对象,然后再有一个从答案资源返回的 $getAnswers 方法。这里的目标是将方法保留在实际资源对象上,而不是将它们提取到单独的工厂/服务调用中。

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

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

据我所知,没有办法像我使用它们的方式将特定参数传递给 $resource 自定义操作。

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

【问题讨论】:

    标签: angularjs repository-pattern angular-resource ngresource


    【解决方案1】:

    这最终比我想象的要容易得多。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-10
      • 1970-01-01
      • 1970-01-01
      • 2013-03-10
      • 1970-01-01
      • 2013-05-09
      • 1970-01-01
      • 2013-10-18
      相关资源
      最近更新 更多