前端设计

vue3插槽

2024-09-14

在Vue 3中,插槽是一种让父组件能够向子组件传递内容的机制。插槽可以分为默认插槽、具名插槽和作用域插槽。

1、默认插槽:子组件在模板中预留一个插槽,父组件可以传入内容填充这个插槽。

1)子组件(Child.vue):

<template>

  <div>

    <slot>默认内容</slot>

  </div>

</template>

2)父组件:

<template>

  <Child>

    <p>这是父组件传递的内容。</p>

  </Child>

</template>


2、具名插槽:子组件可以定义多个插槽,父组件传递内容时需要指定插槽的名字。

1)子组件:

<template>

  <div>

    <slot name="header"></slot>

    <slot name="main"></slot>

    <slot name="footer"></slot>

  </div>

</template>

2)父组件:

<template>

  <Child>

    <template v-slot:header>

      <h1>页头内容</h1>

    </template>

 

    <template v-slot:main>

      <p>主体内容</p>

    </template>

 

    <template v-slot:footer>

      <footer>页脚内容</footer>

    </template>

  </Child>

</template>


3、作用域插槽:除了传递内容,插槽还可以提供数据给父组件使用。

1)子组件:

<template>

  <div>

    <slot :user="user">{{ user.name }}</slot>

  </div>

</template>

<script>

export default {

  data() {

    return {

      user: { name: '张三', age: 30 }

    };

  }

};

</script>

2)父组件:

<template>

  <Child>

    <template v-slot:default="slotProps">

      <p>用户名: {{ slotProps.user.name }}</p>

      <p>用户年龄: {{ slotProps.user.age }}</p>

    </template>

  </Child>

</template>


4、总结

在Vue 3中,插槽的使用有所简化,v-slot指令被简化为 # 和 v-slot:,最新的语法形式如下:

<Child>

  <template #header>

    <h1>页头内容</h1>

  </template>

 

  <template #main>

    <p>主体内容</p>

  </template>

 

  <template #footer>

    <footer>页脚内容</footer>

  </template>

</Child>

以上代码展示了如何在Vue 3中使用默认插槽、具名插槽和作用域插槽