如果POST失败,如何在角度2应用程序中恢复数据

时间:2016-04-18 23:03:14

标签: angular

我正在构建一个Angular 2应用,其中有input个字段(例如用户名,电话号码)与变量双向绑定。用户更新字段并单击Save后,POST请求将发送到服务器。我的问题是,如果POST请求无法更新数据库,我应该如何恢复变量的值?

我想到了两种方法:

  1. 服务器在POST响应中返回该用户的当前状态,无论保存成功或失败,因此应用程序始终可以使用该状态。但是,如果服务器已关闭,则不会返回任何状态。

  2. 在Angular app中,具有存储先前状态的重复数据结构。如果帖子因任何原因失败,请使用该备份数据进行恢复。这总是有效,但似乎有点浪费,因为它使存储空间增加了一倍。

  3. Angular 2是否有内置任何东西来解决这个问题?

    谢谢!

2 个答案:

答案 0 :(得分:2)

第一种方法听起来很棒(因为您将始终获得实体的最新有效状态),但需要将此类实现添加到后端api的所有受影响的端点,有时甚至可能无法访问源。

您可以通过简单的方式实现第二个选项并且效果很好 - 至少大部分时间都是如此!所以你可以说profile对象是db的当前状态:

var profile = {'name': 'john', 'surname': 'smith', 'age': 30};

profileForm这是表单的双向绑定状态。在将表单呈现给用户之前,使用angular.copy将原件复制到表单1:

var profileForm = {};
angular.copy(profile, profileForm);

如果POST成功,则只更新源对象:

profile = profileForm;
profileForm = null;

这样,您不仅可以永久地丢失源对象,还可以在另一个中使用失败的值,这样可以显示在服务器端执行验证错误的用户输入。 (例如,用户名存在)

答案 1 :(得分:1)

  

这总是有效,但似乎有点浪费,因为它会使存储空间增加一倍。

除非您在这些输入中存储了一些 big-ass 用户名和电话号码,否则您在这里过度优化。一些简单字符串的存储成本可以忽略不计 - 采用最有意义的方法(即产生最清晰且最易理解的代码),并且效果最好。

只有你告诉我们的内容,恕我直言,这几乎肯定是第二种方法:这是一个很好理解的模式,它回避了当服务器无法访问时该怎么做的问题(你的问题) 必须回答,如果不采用某种形式的第二种方法,将很难回答。

ng2没有为此目的明确地“内置”任何东西,但是有许多方法可以声明性地(首选)或命令性地实现它。