如何使用Angular 2服务提供包含其他资源的链接/ ID的资源集合?

问题描述:

我有一组用户。每个用户都有一个cards阵列,它由用户选择的卡片的id组成。如何使用Angular 2服务提供包含其他资源的链接/ ID的资源集合?

user.cards = [10, 12, 24, 31]

我想有一个是最被用户选择了10张卡。我有和card.service.js,我猜是DAO。 card.service.js看起来像这样(为简单起见,使用普通的Promises)。

(function(app) { 
    app.CardService = ng.core.Injectable({}).Class({ 
     constructor: function() {}, 
     getCards: function() { 
      return Promise.resolve(app.cards) 
     }, 
     getCard: function(cardId) { 
      return Promise.resolve(app.cards.get(cardId)); 
     }, 
     getTop10Cards: function() { 
      // How would I go about doing this method? 
     } 
    }) 
})(window.app || (window.app = {})); 

从逻辑上讲,我需要所有用户的列表,收集他们的cardIds并聚集他们找到最常用的卡。但应CardService使用UserService(作为注射)?或者在另一个DAO中使用DAO以错误的方式去解决它?我应该有一个单独的集合,其中包含每个模型之间的链接(如联合表)?

为了帮助我解决这个客户端问题,我调查了后端资源的外观。我想出了一些类似于“How to handle many-to-many relationships in a RESTful API?”的东西。

这些是我的API端点将可能看起来像:/users,/cards,/cards/{cardId}/votes/cards/{cardId}/votes包含定义用户和他们选择的卡之间的关系的资源。

在代码中,我确实在card.service.js的内部注入了vote.service.js。当我使用这张牌时,我也将它们与他们的子集votes合成。有关更多信息,请参阅“angular js model relationships”。

我希望这会帮助任何会遇到这个问题的人。

干杯!