初始代码
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>