VueJS中如何将MongoDB的ObjectID传入PATCH请求实现产品字段编辑
实现方案
你遇到的核心问题有两个:一是点击编辑按钮时没有把当前行的产品ID绑定到表单对象上,二是现有代码存在变量作用域和字段名匹配错误,按以下步骤修改即可:
步骤1:表格行编辑按钮绑定当前产品数据
你的表格一定是通过v-for遍历产品列表渲染的,给每行的EDIT按钮绑定点击事件,把当前行的完整产品对象传入处理函数:
<template> <!-- 表格行遍历部分 --> <tr v-for="produs in produseList" :key="produs._id"> <!-- 其他单元格内容 --> <td> <button @click="openEditModal(produs)">EDIT</button> </td> </tr> <!-- 编辑弹窗部分 --> <!-- 弹窗里的表单依旧绑定你原来的this.Produs对象即可 --> </template>
步骤2:新增打开编辑弹窗的处理函数
这个函数负责把当前选中的产品数据赋值给表单绑定的Produs对象,注意MongoDB默认的主键字段是_id不是id:
methods: { openEditModal(produs) { // 把当前点击行的产品所有字段赋值给表单绑定对象 this.Produs = { ...produs } // 这里可以加控制弹窗显示的逻辑,比如this.editModalVisible = true }, // 原来的updateProduct方法修改如下 updateProduct() { // 直接拿绑定的this.Produs里的_id即可,不需要额外定义局部变量 axios.patch(`http://localhost:3000/produse/${this.Produs._id}`, this.Produs) .then((response) => { console.log(response) // 提交成功后可以加关闭弹窗、刷新产品列表的逻辑 }) .catch((error) => { console.log(error) }) } }
原有代码的问题说明
- 你在
updateProduct里定义的produsModificat是局部变量,但是请求路径里访问的是this.produsModificat,this上没有这个属性,所以肯定拿不到ID - MongoDB生成的唯一标识默认字段名是
_id,不要写成id - 原代码的PATCH请求没有传入第二个参数(要更新的产品数据),后端收不到修改后的内容
- 如果你后端接口确实接收的是
id字段而不是_id,可以在openEditModal里手动赋值:this.Produs.id = produs._id
内容的提问来源于stack exchange,提问作者Teodor
相关产品推荐
相关产品推荐

