AngularJs-持久性、存储、ajax请求、数据完整性

AngularJs-持久性、存储、ajax请求、数据完整性,ajax,angularjs,persistence,Ajax,Angularjs,Persistence,我正在评估AngularJS是否可以作为我中等简单的web应用程序的解决方案 其目的是尽可能减少AJAX服务器对数据的请求量 我的实际问题很简单,但这一要求的影响正在导致混乱 简而言之:“Angular可以通过用户输入修改从后端接收的JSON数据的一部分,并保持状态,直到我准备好返回该数据为止 情景: 从服务器获取JSON数据,其中包含每个根名称的根名称和相关地址详细信息。该列表与每个项目的“编辑地址”按钮一起呈现到屏幕上 用户单击“编辑地址”,将显示一个表单,其中包含根名称的地址数据 用户编辑

我正在评估AngularJS是否可以作为我中等简单的web应用程序的解决方案

其目的是尽可能减少AJAX服务器对数据的请求量

我的实际问题很简单,但这一要求的影响正在导致混乱

简而言之:“Angular可以通过用户输入修改从后端接收的JSON数据的一部分,并保持状态,直到我准备好返回该数据为止

情景:

从服务器获取JSON数据,其中包含每个根名称的根名称和相关地址详细信息。该列表与每个项目的“编辑地址”按钮一起呈现到屏幕上

用户单击“编辑地址”,将显示一个表单,其中包含根名称的地址数据

用户编辑数据,单击submit,客户机将JSON数据发送到服务器,为了参数起见,我们得到一个成功返回。地址详细信息被修改

这就是我问题的核心——以及缺乏理解——凸显出来的地方

我是否需要通过编辑单个列表项从服务器获取包含10个项目的完整列表以及单个修改的地址详细信息,或者我可以简单地更新单个项目客户端并在用户返回列表时保持状态,例如编辑另一个项目

瞧,我们取得了成功,但除了“成功”之外,实际上没有返回任何数据——我们的客户机已经存储了更改

这就是数据完整性问题的症结所在

**或**

获取没有关联地址数据的根项目列表。 用户单击根项目的“编辑地址”按钮。 我们从服务器获取根名称的地址数据并显示表单,用户编辑数据、提交、异步发送数据,获得成功。 用户返回列表,并发出另一个服务器请求以再次从服务器获取列表

这很难解释,但底线是关于持久性和数据完整性

最佳做法是在每个用户编辑数据后向服务器发出请求,还是可以将修改后的数据存储在客户端(具有持久性)


显然,验证将在服务器端和客户端进行。

您所问的更多的是一个服务器端问题,即如何设计一个好的RESTful API,允许在每次不发送/加载整个列表的情况下对单个实体进行更改。因此,您的问题的答案是,这完全取决于您……angular是否执行gr为您将UI元素绑定到控制器中的javascript对象,但当需要将数据保存到服务器时,您可以按照自己的意愿执行

在理想世界(IMO)中,您的服务器端API将支持以下内容:

  • 获取地址列表(angular将其存储在$scope.addresses中)
  • 获取单个地址
  • PUT/PATCH更新地址(当用户对单个地址进行更改并确认时),并且不返回任何内容
  • POST可创建新地址,并返回带有服务器提供标识符(如“id”)的已创建地址,您可以在angular中使用该标识符来确定地址是否已在服务器端持久化。POST后,使用从服务器获得的内容重写angular scope对象,以保存id字段
  • 删除以删除它们(不返回任何内容)
这样,当您让客户端创建地址时,您应该向服务器发送一个帖子来创建地址,获取响应JSON并将其复制到刚刚保存的对象上,这样它就有了一个“id”字段(或类似字段)。您可以使用角度模板直观地表示任何带有“id”的内容“字段已保存到服务器。这样,您就不必每次保存时都重新获取整个列表

对于更新地址,这就是为什么修补程序很有用:您可以只向服务器发送对单个字段的更改,并确保只发送用户更改的内容

删除地址可以通过检查“id”字段是否存在来实现,如果存在,则向服务器发送删除,如果没有,则对象从未“保存”,因此只需从作用域中删除地址即可。成功删除后,您只需从作用域中删除地址,无需重新加载所有内容

当涉及到“数据完整性”时,即如果在您完成原始数据请求后创建了其他地址,则您必须自己完成此操作。。。理想情况下类似于Stack Overflow或Github的操作方式,即在UI中提示服务器端发生了更改,您应该单击以刷新。如何确定刷新取决于您,但您可以通过定期轮询来保持简单,也可以全力以赴地执行WebSocket/服务器端事件,并将更改推送到浏览器


创建持久化到服务器的UI的最佳方法是一个复杂的主题,有很多最佳实践。Angular将支持您想要的任何功能,但您需要在服务器上进行协调。

哇,4分钟后我得到了-2。能给我一些启发吗?;)我没有投反对票,但也许一些源代码可以帮助澄清您的问题,即使它是伪代码。我试图公平地理解这个问题,我想没有人有时间阅读和理解这个问题。还没有代码。这是一个概念,问题是如何最好地使用AngularJS获取/发送数据并保持持久性。非常感谢Ken,这是一个深思熟虑且非常有用的回答。我有一种感觉,试图在整个列表客户端保持持久性将是一个疯狂的想法。现在正在研究RESTfulJavaAPI——谢谢。实际上,您正在维护列表客户端,作为范围内的一个数组。。。但是,当用户更改项目时,您应该使用单独的REST调用将项目保存到服务器。每个项上的ng form指令,并检查$dirty状态