通过AngularJS中的资源执行非规范化数据

通过AngularJS中的资源执行非规范化数据,angularjs,relational,ngresource,Angularjs,Relational,Ngresource,我正在使用AngularJS开发一个Web应用程序。我有两个主要的模式,旅程和地点。每个旅程都有起点和终点 在服务器端,我只处理规范化数据,即行程和位置存储在单独的数据库表中,每个行程条目只存储其目的地的id号 在AngularJS的客户端,我使用两个RESTful ngResources,一个用于旅行,一个用于位置。加载这两个数据后,我用位置数据填充旅程以显示,这样旅程不仅包含startLocation id,还包含startLocation对象位置数据,如下所示: journey.start

我正在使用AngularJS开发一个Web应用程序。我有两个主要的模式,旅程和地点。每个旅程都有起点和终点

在服务器端,我只处理规范化数据,即行程和位置存储在单独的数据库表中,每个行程条目只存储其目的地的id号

在AngularJS的客户端,我使用两个RESTful ngResources,一个用于旅行,一个用于位置。加载这两个数据后,我用位置数据填充旅程以显示,这样旅程不仅包含startLocation id,还包含startLocation对象位置数据,如下所示:

journey.startLocationObject = locations.byId(journey.startLocation);
ById是一个简单的查找函数,返回具有给定id的位置

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

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

谢谢你的帮助,
最好的是,Boris必须以从服务器获取数据并保持客户端无状态的方式工作

因此,在REST应用程序中,不建议将您的旅程数据保留在客户端上


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

此REST实现存在许多类似的问题。也许您可以使用自己的自定义实现。好吧,您不能覆盖该行为。您应该在服务器端实现一个视图,返回已经与其位置关联的旅程。小心不要将数据库表与REST资源混淆。REST中的R代表代表代表性。在服务器上创建最适合客户端需要的表示。@Mike,我明白了,这意味着在服务器上填充数据。为了尽量减少网络流量,我试图避免这样做,但这可能会导致蠕虫泛滥。谢谢你的回复@路易斯,谢谢你的提示,我会的!无状态与缓存和脱机使用的本地存储是矛盾的,不是吗?我想我可能需要在某个时候添加它,然后我有一个本地状态需要与服务器同步……是的,在某个时候,客户端需要在请求之间保留数据。