【问题标题】:Unnormalized data via resource in AngularJS通过 AngularJS 中的资源的非规范化数据
【发布时间】:2014-07-25 05:43:51
【问题描述】:

我正在使用 AngularJS 开发一个 WebApp。我有两个主要模型,旅程和地点。每一段旅程都有起点和终点。

在服务器端,我只处理标准化数据,即旅程和位置存储在单独的数据库表中,每个旅程条目仅存储其目的地的 ID 号。

在客户端(在 AngularJS 中)我使用两个 RESTful ngResource,一个用于旅程,一个用于位置。加载两者后,我用位置数据填充旅程以进行显示,这样旅程不仅包含 startLocation (id),还包含 startLocationObject (位置数据),如下所示:

journey.startLocationObject = locations.byId(journey.startLocation);

ById 是一个简单的查找函数,它返回具有给定 id 的位置。

现在,每次我在旅程中调用 $save 时,位置数据都会丢失,因为旅程被服务器响应覆盖。因此,我必须再次使用位置数据重新填充旅程。

有没有更好的方法来处理这个问题?例如,防止 ngResource 覆盖旅程对象?还是我在 Angular 中遗漏了一些关于关系数据的东西?

感谢您的帮助, 最好的,鲍里斯

【问题讨论】:

  • 这个 REST 实现有很多类似的问题。也许您可以使用自己的自定义实现。 AFAIK 你不能覆盖那个行为。
  • 您应该在服务器端实现一个视图,该视图返回已与其位置关联的旅程。注意不要将您的数据库表与 REST 资源混淆。 REST 中的“R”代表“代表性”。在您的服务器上创建最适合您的客户需求的表示。
  • @Mike,我明白了,这意味着在服务器上填充数据。我试图避免这种情况以尽量减少网络流量,但也许这会打开一罐蠕虫病毒。感谢您的回复!
  • @Luis,谢谢你的提示,我会这样做的!

标签: angularjs relational ngresource


【解决方案1】:

它必须工作的方式是从服务器获取数据并保持客户端无状态。

因此,不鼓励在 REST 应用程序上将“旅程”数据保存在客户端。

旅程数据将来自服务器请求,或者在保存之前将旅程数据保存在另一个变量/集合中。

【讨论】:

  • 无状态与缓存和本地存储以供离线使用是矛盾的,不是吗?我想我可能需要在某个时候添加它,然后无论如何我都有一个需要与服务器同步的本地状态......
  • 是的,在某些时候,客户端需要在请求之间保留数据。
猜你喜欢
  • 2012-09-19
  • 2013-12-11
  • 2016-07-23
  • 2016-05-27
  • 2017-01-14
  • 2012-11-18
  • 1970-01-01
  • 2016-12-28
  • 2014-12-23
相关资源
最近更新 更多