我正在构建一个Angular 2应用,其中有input
个字段(例如用户名,电话号码)与变量双向绑定。用户更新字段并单击Save
后,POST
请求将发送到服务器。我的问题是,如果POST请求无法更新数据库,我应该如何恢复变量的值?
我想到了两种方法:
服务器在POST响应中返回该用户的当前状态,无论保存成功或失败,因此应用程序始终可以使用该状态。但是,如果服务器已关闭,则不会返回任何状态。
在Angular app中,具有存储先前状态的重复数据结构。如果帖子因任何原因失败,请使用该备份数据进行恢复。这总是有效,但似乎有点浪费,因为它使存储空间增加了一倍。
Angular 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没有为此目的明确地“内置”任何东西,但是有许多方法可以声明性地(首选)或命令性地实现它。