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

Vue.js CRUD应用中点击编辑/删除按钮时如何获取对象ID?

解决Vue循环中点击按钮获取对应对象ID的问题

我来帮你搞定这个问题!你现在遇到的情况是在循环渲染的memit列表里,点击编辑或删除按钮时没法拿到对应memit的ID,因为event.target返回的是按钮元素本身。其实Vue提供了非常直观的方式来处理这种场景,下面给你两种常用的解决方案:

方法一:直接传递memit的ID作为参数

你可以在绑定点击事件的时候,直接把当前循环项的memit.id作为参数传给方法,这样就能在方法里直接拿到对应ID了。

修改后的HTML模板:

<div v-for="(memit) in memits" :key='memit.id' class="mem-it"> 
 <div> 
 <h3>{{ memit.title }}</h3> 
 <p>{{ memit.body }}</p> 
 <button @click="editMemit(memit.id)">Edit</button> 
 <button @click="deleteMemit(memit.id)">X</button> 
 </div> 
</div>

对应的methods修改:

methods: { 
 createMemit() { 
 this.memits.push({ id: Math.random(), title:this.writeMemo, body:this.writeMemoBody }); 
 this.writeMemo=''; 
 this.writeMemoBody=''; 
 localStorage.setItem('old-memits',JSON.stringify(this.memits)); 
 },
 // 编辑方法接收ID参数
 editMemit(memitId) {
   console.log('要编辑的memit ID:', memitId);
   // 根据ID找到对应的memit,做后续编辑操作
   const targetMemit = this.memits.find(item => item.id === memitId);
   if(targetMemit) {
     // 把目标memit的内容填充到输入框
     this.writeMemo = targetMemit.title;
     this.writeMemoBody = targetMemit.body;
   }
 },
 // 删除方法接收ID参数
 deleteMemit(memitId) {
   console.log('要删除的memit ID:', memitId);
   // 过滤掉要删除的memit
   this.memits = this.memits.filter(item => item.id !== memitId);
   // 更新localStorage保持数据同步
   localStorage.setItem('old-memits',JSON.stringify(this.memits));
 }
}

方法二:传递整个memit对象

如果你需要用到memit的其他属性(比如标题、内容),也可以直接把整个memit对象作为参数传递,这样操作起来更方便:

修改后的HTML模板:

<div v-for="(memit) in memits" :key='memit.id' class="mem-it"> 
 <div> 
 <h3>{{ memit.title }}</h3> 
 <p>{{ memit.body }}</p> 
 <button @click="editMemit(memit)">Edit</button> 
 <button @click="deleteMemit(memit)">X</button> 
 </div> 
</div>

对应的methods修改:

methods: { 
 createMemit() { 
 this.memits.push({ id: Math.random(), title:this.writeMemo, body:this.writeMemoBody }); 
 this.writeMemo=''; 
 this.writeMemoBody=''; 
 localStorage.setItem('old-memits',JSON.stringify(this.memits)); 
 },
 // 编辑方法接收memit对象
 editMemit(memit) {
   console.log('要编辑的memit:', memit);
   // 直接用memit的属性填充输入框
   this.writeMemo = memit.title;
   this.writeMemoBody = memit.body;
 },
 // 删除方法接收memit对象
 deleteMemit(memit) {
   console.log('要删除的memit:', memit);
   // 根据ID过滤删除
   this.memits = this.memits.filter(item => item.id !== memit.id);
   // 更新localStorage保持数据同步
   localStorage.setItem('old-memits',JSON.stringify(this.memits));
 }
}

为什么原来的方式拿不到ID?

之前你用$event只能获取到按钮元素,是因为事件绑定在按钮上,event.target指向的是触发事件的DOM元素(也就是按钮),而不是循环中的memit数据。通过直接把数据作为参数传递,就能跳过DOM元素,直接拿到我们需要的业务数据啦。

内容的提问来源于stack exchange,提问作者F. Lucas Picco

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 07:37:46