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>
相关推荐
on_pluto_18 分钟前
【debug】关于如何让电脑里面的两个cuda共存
linux·服务器·前端
r***F26232 分钟前
Go-Gin Web 框架完整教程
前端·golang·gin
chilavert31835 分钟前
技术演进中的开发沉思-220 Ajax:XMLHttpRequest 对象
前端·javascript
IT_陈寒1 小时前
Python开发者必看:5个被低估但能提升200%编码效率的冷门库实战
前端·人工智能·后端
g***78911 小时前
鸿蒙NEXT(五):鸿蒙版React Native架构浅析
android·前端·后端
q***71851 小时前
Webpack、Vite区别知多少?
前端·webpack·node.js
千里念行客2401 小时前
国产射频芯片“小巨人”昂瑞微今日招股 拟于12月5日进行申购
大数据·前端·人工智能·科技
你挚爱的强哥2 小时前
【sgSelectExportDocumentType】自定义组件:弹窗dialog选择导出文件格式word、pdf,支持配置图标和格式名称,触发导出事件
vue.js·pdf·word
小杨快跑~2 小时前
Vue 3 + Element Plus 表单校验
前端·javascript·vue.js·elementui
我叫张小白。3 小时前
Vue3监视系统全解析
前端·javascript·vue.js·前端框架·vue3