角度形式 - 仅发送已更改的字段

Roy*_*ari 9 angularjs

我正在创建一个Web客户端,它使用带有角度的设置Web API.有很多设置,它们都是可选的.如果我发送设置,则应保存.未发送的设置不应更改.

要求是为所有设置设置一个" 保存更改"按钮.

我想知道Angular中是否有某种方法可以实现这一点.

我想过不使用HTML form并收集数据并自己创建ajax请求,但后来我将失去验证机制(这与Angular-UI验证工作良好).

我考虑将表单拆分为小表单并仅ng-dirty提交不是false 的表单,但如果某些请求失败(这违反了要求),这可能会导致部分保存.

任何的想法?

r4w*_*173 17

您可以在提交之前检查表单或任何命名字段是否已修改.如果表单有名称,您的输入名称如下:

<form name="myForm">
   <input name="input1">
</form>
Run Code Online (Sandbox Code Playgroud)

在控制器中,你将有机会获得对象$scope.myForm$scope.myForm.input1,和这些对象将有一个$dirty属性,如果初始值是由用户修改这是真的.


Ste*_*ack 6

在Angular文档中,有一个示例包含ng-copy以实现重置功能.

http://docs.angularjs.org/cookbook/advancedform

在提交期间,您可以将起始模型(主副本)与更改/提交的对象(更改的副本)进行比较,并仅提交更改的项目(或只删除相同/未更改的项目).

使用http://blog.vjeux.com/2011/javascript/object-difference.html对副本和主文件进行 区分 这需要额外的工作来处理数组.或转换为JSON并区分JSON https://github.com/benjamine/JsonDiffPatch

  • 这是重新发明轮子 - 角度FormController和ngModel已经执行脏检查,添加类并将此信息存储在$ scope中.请参阅r4w87173的回答 (2认同)