You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AngularJS xeditable保存问题:将$data转为JSON对象发起PATCH请求

解决Xeditable中单个字段编辑后生成合法JSON对象发送PATCH请求的问题

我明白你的困境——当用xeditable自动生成编辑字段时,没法像之前那样手动绑定每个ng-model来构建完整的更新对象。其实核心问题是你需要知道当前编辑的是哪个字段,然后把单个的$data值包装成对应的键值对对象。

这里有个简单直接的解决方案:

步骤1:在HTML中传递字段名给save函数

修改你的editable元素,把当前绑定的字段名称(比如company)作为第三个参数传给save函数:

<td data-title="'company'" >
  <p class="form-control-static"><a href="#" editable-text="customer.company" onbeforesave="save($data, customer.custref, 'company')">
    {{ customer.company || 'empty' }}
  </a></p>
</td>

步骤2:修改save函数构建合法JSON对象

在你的AngularJS控制器里,更新save函数,利用传入的字段名创建只包含当前修改字段的对象:

$scope.save = function(data, id, fieldName){
  console.log(data);
  // 使用ES6计算属性名创建对应字段的对象
  const updateObj = { [fieldName]: data };
  
  $http.patch(API_URL + "v1/customers/" + id, updateObj)
  .then(function (response) {
    console.log("更新成功!");
  },function error(response) {
    console.log('更新失败');
    $scope.error = response.statusText;
  });
};

适配多个字段的情况

对于其他30个字段,只需要重复这个模式就行,比如编辑联系人姓名的字段:

<td data-title="'contactName'" >
  <p class="form-control-static"><a href="#" editable-text="customer.contactName" onbeforesave="save($data, customer.custref, 'contactName')">
    {{ customer.contactName || 'empty' }}
  </a></p>
</td>

不管是editable-number、editable-select还是其他类型的xeditable控件,这个方法都适用,只要传入对应的字段名即可。

为什么这个方法有效?

  • 它符合RESTful API的最佳实践:PATCH请求只发送实际修改的字段,减少数据传输量
  • 完全适配自动生成的输入字段,不用提前维护一个包含所有30个字段的庞大对象
  • 代码简洁,每个字段的修改逻辑统一,便于维护

内容的提问来源于stack exchange,提问作者Kyle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:00:34