【问题标题】:Angular: What is the best way for storing objects in service for showing in view and crud functions to serverAngular:在服务中存储对象以在视图中显示和向服务器显示 crud 功能的最佳方式是什么
【发布时间】:2016-04-15 18:22:22
【问题描述】:

我想创建一个从服务器获取关系数据的服务。我有两个选择,但我不知道该选择哪一个。

第一个选项是以多维对象数组的形式返回数据。

posts = [{id: 1, message: 'Sample 1', comments: [{id: 1, message:  'Sample comment 1', replies: [{id: 1, message: 'Sample reply 1'}]}]}]

第二个选项是为每个对象返回一个一维数组。

posts = [{id: 1, message: 'Sample ', comment_id: 1}]
comments = [{id: 1, message: 'Sample comment 1', reply_id: 1}]
replies = [{id: 1, message: 'Sample reply 1'}]

并通过外键和主键比较每个对象数组

我不知道哪个更好,或者是否有其他方法可以在角度上做到这一点。我想要的是轻松地将编辑删除数据添加到服务器,以及轻松更新或例如推送视图对象上的新数据。

【问题讨论】:

  • 看起来不太好 数据结构 Post 必须是一个 Object,因为您需要使用 cmets 和 Replies 作为 Object 的子节点,这可以解决您的问题。如果您想使用相同的 DS 继续您需要处理所有这些 json 数组,然后将其转换为 Object
  • 我的示例对象不是在数组中吗?根据我对您的回答的理解,我认为这更像是第一个选项。但是你能举个例子更清楚吗?

标签: javascript arrays angularjs object


【解决方案1】:

我会选择第二个选项,但要更改结构,使对象指向它们的父对象,而不是它们的子对象:

posts = [{id: 1, message: 'Sample '}]
comments = [{id: 1, message: 'Sample comment 1', post_id: 1}]
replies = [{id: 1, message: 'Sample reply 1', comment_id: 1}]

这允许您构建具有多个链接到单个父级的子级的结构。

这里的优点是对象就像 NoSQL 响应。这为您提供了数据库的一些灵活性。

此外,您可以等到需要时再提出请求。如果您显示可点击的帖子列表,则单击其中一个将请求该帖子的 cmets(同样带有回复)。这将减少在单个请求中下载所有帖子、cmets 和回复的开销,并且仅在单击对象时下载它们。

【讨论】:

  • 谢谢。是的,我的身份证错了。所以每次我去一个新帖子时,我都需要获取该帖子的 cmets 和回复?如果我去另一个帖子然后回到这个帖子怎么办?它仍然会获取 cmets 和回复吗?我在想是否有办法防止对服务器的频繁请求?
  • 可以通过id缓存数据,只有在缓存中没有新数据时才去获取。
  • 我明白了,最后一个问题,我需要为每个对象提供服务吗? postService、commentService 和 replyService?那么对于每项服务,我会从服务器返回帖子吗?我真的很困惑如何以角度获取数据。我有两个页面显示来自服务器的帖子,不同页面的不同帖子。我还想过创建服务 PER 模块。所以一个页面有一个“postModule1Service”,另一个页面有另一个“postModule2Service”。还是应该根据控制器的范围来处理?有什么想法吗?
  • 这将是 AngularJS 处理对象的方式,为每个对象集合创建一个服务。如果数据源是 RESTful,使用 $resource 模块:docs.angularjs.org/api/ngResource/service/$resource
  • 我明白了。我会检查一下。但是,我需要获取每个集合的所有数据。例如,我有这个帖子,然后获取该帖子的所有 cmets,然后获取每个 cmets 的回复,那么我如何获得每个 cmets 的用户和回复?我正在尝试列出来自数据库的帖子及其各自的 cmets,并一次全部回复并显示它,而无需再次从服务器获取数据。
猜你喜欢
  • 2011-03-06
  • 1970-01-01
  • 2016-09-14
  • 2017-02-09
  • 1970-01-01
  • 2017-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多