Vue3封装通用确认删除按钮实战案例

初始代码

html 复制代码
<script setup>

</script>

<template>
  <a-popconfirm
      title="您确认要删除吗?"
      ok-text="确认"
      cancel-text="取消"
      @confirm="onDelete(record.id)"
  >
    <a-button size="small" type="primary" danger>删除</a-button>
  </a-popconfirm>
</template>

要解决的问题

  • 怎么让这个onDelete方法变成通用的
  • 怎么让record.id也就是要删除的ID变成通用的

解决思路

  • defineProps 可以定义属性, 这个要删除的ID可以通过属性传过来
  • emit可以定义事件, 删除方法可以通过事件传递

定义属性

js 复制代码
const props = defineProps({
  id: {
    type: String,
    default: ''
  }
})

定义方法

js 复制代码
// 定义要暴露的方法
const emit = defineEmits(["delete"])

// 定义触发的方法
function onDelete() {
  // 通过emit传值
  emit("delete", props.id)
}

完整代码

html 复制代码
<script setup>
// 定义属性
const props = defineProps({
  id: {
    type: String,
    default: ''
  }
})

// 定义要暴露的方法
const emit = defineEmits(["delete"])

// 定义触发的方法
function onDelete() {
  // 通过emit传值
  emit("delete", props.id)
}
</script>

<template>
  <a-popconfirm
      title="您确认要删除吗?"
      ok-text="确认"
      cancel-text="取消"
      @confirm="onDelete"
  >
    <a-button size="small" type="primary" danger>删除</a-button>
  </a-popconfirm>
</template>

优化代码

ID可以等到父组件监听到点击事件的时候手动传入, 而不需要通过属性传入.

html 复制代码
<script setup>
// 定义要暴露的方法
const emit = defineEmits(["delete"])

// 定义触发的方法
function onDelete() {
  // 通过emit传值
  emit("delete")
}
</script>

<template>
  <a-popconfirm
      title="您确认要删除吗?"
      ok-text="确认"
      cancel-text="取消"
      @confirm="onDelete"
  >
    <a-button size="small" type="primary" danger>删除</a-button>
  </a-popconfirm>
</template>
相关推荐
骑着蜗牛撵大象3279 分钟前
豆包 Seed 驱动的记账智能体:从拍票抽取到月报生成的全链路落地记录
java·前端·javascript·结构化输出·豆包seed·多模态识别·记账系统
溪语流沙11 分钟前
【Web全栈进阶】前端世界观:现代工具链与框架为什么存在
前端·javascript·vue.js
kyriewen33 分钟前
我逐个测了 JSON.stringify 的 7 个坑:第 1 个就在丢数据
前端·javascript·程序员
积流成海1 小时前
用代码实现哈希计算器:Web Crypto API 实战
前端·算法·哈希算法·哈希函数·盘子工具站
data analyse 4561 小时前
服务端访问日志聚合 PV 与 UV 怎么实现?日志采集与口径设计
大数据·前端·数据分析
song5011 小时前
React Native for OpenHarmony 实战:三方库 react-native-ratings 的鸿蒙化适配指南
javascript·react native·react.js·分类·harmonyos
JavaGuide1 小时前
DeepSeek Harness 重磅更新,Codex、Claude Code 子智能体进官方插件列表了,还有 Git 工作树和思考翻译!
前端·后端
WeiXin_DZbishe1 小时前
基于微信小程序的本地闲置物品交易平台-计算机毕设 附源码【课程设计】26825
vue.js·spring boot·python·微信小程序·架构·php·课程设计
小羊没烦恼!1 小时前
OS X 上使用.NET开发应用程序
开发语言·前端·数据库·人工智能·c#·策略模式
朱包林1 小时前
iTerm2终端配置指南
linux·javascript·python·云原生·容器·kubernetes·云计算