Vue3中如何将组件内部数据暴露给插槽

458 阅读1分钟

需求背景:

  • 下图所示弹窗是调用一个组件来展示的,我往这个组件的插槽里添加了文本内容和一个按钮。
  • 我现在的目的是想通过点击这个按钮来关闭弹窗。但实际上,弹窗的关闭动作是组件内部定义的
  • 现在要解决的主要问题就是,如何能够在外部调用组件插槽的时候,拿到到组件内部的函数或者数据呢

image.png

具体操作

  • 假设对应弹窗组件如下:

    这里在插槽位置绑定组件内部的函数

// pophover.vue
<div>
  <slot name='content' :close='close' :words='"一些简单的文本内容"'>  </slot>
</div>

<script lang='ts' setup>

function close(){
  console.log('运行close函数')
}

</script>

那当你调用这个组件时,获得组件内部写法的方式如下:

<pophover> 
  <template #content='{close,words}'> // 通过解构语法拿到插槽上所绑定的数据
    {{words}
    <button @click='close'> 关闭 </button>
  
  </template>

</pophover>