Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果POST失败,如何在angular 2应用程序中恢复数据_Angular - Fatal编程技术网

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

如果POST失败,如何在angular 2应用程序中恢复数据,angular,Angular,我正在构建一个Angular 2应用程序,其中有双向绑定到变量的输入字段(如用户名、电话号码)。用户更新字段并单击保存后,将向服务器发送POST请求。我的问题是,如果POST请求无法更新数据库,我应该如何恢复变量的值 我想到了两种方法: 无论保存成功与否,服务器都会在POST响应中返回该用户的当前状态,因此应用程序始终可以使用该状态。但是,如果服务器关闭,则不会返回任何状态 在Angular应用程序中,有一个存储以前状态的重复数据结构。如果post因任何原因失败,请使用该备份数据进行恢复。这总是

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

我想到了两种方法:

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

  • 在Angular应用程序中,有一个存储以前状态的重复数据结构。如果post因任何原因失败,请使用该备份数据进行恢复。这总是有效的,但似乎有点浪费,因为它将存储空间增加了一倍

  • Angular 2有内置的解决方案吗


    谢谢

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

    您可以用一种简单的方式实现第二个选项,并且效果非常好——至少在大多数情况下是这样!因此,您可以使用say
    profile
    对象,它是数据库中的当前状态:

    var profile = {'name': 'john', 'surname': 'smith', 'age': 30};
    
    以及
    profileForm
    ,它是表单的双向绑定状态。在向用户展示表单之前,使用
    angular.copy
    将原件复制到表单中:

    var profileForm = {};
    angular.copy(profile, profileForm);
    
    如果
    POST
    成功,则仅更新源对象:

    profile = profileForm;
    profileForm = null;
    
    这样,不仅您永远不会丢失源对象,还可以将失败的值放在另一个值中,这样您就可以显示用户输入,并在服务器端执行验证错误。(例如用户名存在)

    这总是有效的,但似乎有点浪费,因为它将存储空间增加了一倍

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

    仅考虑到您告诉我们的内容,IMHO这几乎肯定会是第二种方法:这是一种很好理解的模式,它回避了当服务器无法访问时该怎么做的问题(这个问题您必须回答,如果不实现第二种方法的某种形式,您将很难回答)


    ng2没有任何明确用于此目的的“内置”功能,但有许多方法可以声明(首选)或强制实现它

    这个问题是关于角度2的<代码>$scope是一个ng1构造,它(谢天谢地)在ng2中不存在。我误解了这个问题,但是正如你指出的,ng2显然没有为此提供内置功能,所以我的答案仍然是相关的,因为它是简单的js,并且足够通用,可以应用于任何一种情况。谢谢你的否决票!谢谢你的回复!你能详细介绍一下“声明式”和“命令式”方法吗?每种方法的优缺点是什么?谢谢@不客气!这是一个非常大,非常不同的问题。。。这是一个我真的很想回答的问题,但它绝对值得我提出自己的问题-请随意发布,我会在那里与您交谈:-)