Vue3 slot如何进行数据的传递?

22 min read

在Vue3中,可以使用作用域插槽(scoped slots)来实现数据的传递。作用域插槽是一种允许父组件在插槽内容中传递数据给子组件的方式。

首先,在父组件中定义一个包含数据的插槽,并将数据作为插槽属性传递:

<template>
  <Child>
    <template #default="slotProps">
      <p>{{ slotProps.data }}</p>
    </template>
  </Child>
</template>

<script>
import Child from '@/components/Child.vue';

export default {
  components: {
    Child
  },
  data() {
    return {
      myData: 'Hello, Vue3!'
    };
  }
};
</script>

然后,在子组件中通过v-slot指令访问父组件插槽中传递的数据:

<template>
  <div>
    <slot :data="myData"></slot>
  </div>
</template>

<script>
export default {
  props: ['myData']
};
</script>

在这个例子中,父组件通过:data="myData"myData数据传递给子组件的插槽。子组件通过作用域插槽的slotProps参数访问到了传递的数据,并在<p>{{ slotProps.data }}</p>中进行了展示。

这样,父组件和子组件之间就通过作用域插槽实现了数据的传递。