在AngularJS中与服务器同步时,保留表单上的浏览器状态
Retaining browser state on form when synchronising with server in AngularJS
我有一个HTML表单,它由一个名为a
的对象的ngModel
支持。当用户在表单中输入数据时,服务器上的资源会使用PUT请求进行更新。我需要使用服务器从该请求返回的数据来更新/替换我的本地数据,因为像lastModified
这样的东西会发生变化。
替换像a = b
这样的整个对象(其中b
是服务器响应)会导致整个HTML表单重新呈现,因为就ngModel
而言,它有一个全新的对象。这也很糟糕,因为这意味着,如果用户有一个聚焦的输入,那么在表单重新渲染时,该输入将失去焦点。
我已经编写了一个函数来递归地添加/删除/更新a
对象上的键,同时保留所有引用,从而避免了重新渲染。然而,我有一种感觉,这是一个糟糕的方法。这是Angular中的一个常见问题吗?否则我该如何解决它?还是我做错了什么?
更新:我的表单上没有ngModel
。相反,表单是ngRepeat
内部的迭代元素。
首先要澄清的是,我希望您的表单上没有ngModel,而是表单的每个输入上?
现在来谈谈有用的一点:你知道angular。extend吗?它用于通过源对象的值来扩展目标对象,同时保留引用。参考你的"a"-对象和"b"响应对象,它可以简单到:
angular.extend(a, b);
还有一个功能更强大的同名jQuery。(不过,当您使用jQuery时,不要忘记您的摘要/应用程序调用)。
http://docs-angularjs-org-dev.appspot.com/api/angular.extend
您可能还想研究以更结构化的方式处理资源。这个比特应该特别感兴趣:
重要的是要意识到,调用$resource对象方法会立即返回一个空引用(对象或数组取决于isArray)。从服务器返回数据后,将使用实际数据填充现有引用。这是一个有用的技巧,因为通常资源被分配给模型,然后由视图进行渲染。如果对象为空,则不会进行渲染,一旦数据从服务器到达,就会用数据填充对象,视图会自动重新渲染自己,显示新数据。
http://docs-angularjs-org-dev.appspot.com/api/ngResource.$resource
- 使用 struts 标签和 Javascript 的动态行为保留表单中的值
- HTML多页表单显示隐藏部分,保留表单数据
- 如何添加动态表单元素但保留其值(JS)
- Wordpress:提交后,我如何在搜索表单中保留市场复选框
- 表单提交后保留数据库查询结果
- jQuery:在序列化之前保留表单值
- EXT-JS 4.2.1 保留表单 - 面板滚动条的当前位置
- 跨多个页面保留 Cookie 表单值
- AngularJS:提交表单后保留下拉选项
- 防止表单 POST 重定向发生,但仍保留引导验证
- AngularJS不保留表单中复选框列表中的选定项
- 提交带有文件附件的表单后,保留内容网页
- 如何在 AJAX 请求 (Rails) 之间保留表单输入数据
- 保留下拉列表的表单值
- 如何在验证后保留表单值
- 如何在验证失败弹簧 MVC 时保留输入表单值
- 在 html 中插入 javascript 保留表单
- 提交表单后如何在下拉框中保留所选值
- 在 Meteor.js 中保留表单值
- 在提交 HTML 表单后保留 JavaScript 中的 innerHTML 值