当前位置:首页 > VUE

vue插槽实现

2026-01-12 18:24:13VUE

Vue 插槽的基本用法

插槽(Slot)是 Vue 组件化开发中的重要特性,用于在父组件中向子组件传递模板内容。通过插槽可以实现灵活的组件内容分发。

在子组件中通过 <slot> 标签定义插槽位置:

<!-- 子组件 Child.vue -->
<template>
  <div>
    <h2>子组件标题</h2>
    <slot></slot>
  </div>
</template>

在父组件中可以向插槽传递任意内容:

<!-- 父组件 Parent.vue -->
<template>
  <Child>
    <p>这是插入到子组件中的内容</p>
  </Child>
</template>

具名插槽

当需要多个插槽时,可以使用具名插槽实现更精确的内容分发。

子组件中定义具名插槽:

<!-- 子组件 Layout.vue -->
<template>
  <div>
    <header>
      <slot name="header"></slot>
    </header>
    <main>
      <slot></slot>  <!-- 默认插槽 -->
    </main>
    <footer>
      <slot name="footer"></slot>
    </footer>
  </div>
</template>

父组件中使用 v-slot 指令指定插槽名称:

vue插槽实现

<!-- 父组件 Page.vue -->
<template>
  <Layout>
    <template v-slot:header>
      <h1>页面标题</h1>
    </template>

    <p>主要内容区域</p>

    <template v-slot:footer>
      <p>版权信息</p>
    </template>
  </Layout>
</template>

作用域插槽

作用域插槽允许子组件将数据传递给父组件中的插槽内容,实现更灵活的渲染控制。

子组件通过插槽属性传递数据:

<!-- 子组件 List.vue -->
<template>
  <ul>
    <li v-for="item in items" :key="item.id">
      <slot :item="item"></slot>
    </li>
  </ul>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, name: '项目1' },
        { id: 2, name: '项目2' }
      ]
    }
  }
}
</script>

父组件通过 v-slot 接收数据:

<!-- 父组件 App.vue -->
<template>
  <List>
    <template v-slot:default="slotProps">
      <span>{{ slotProps.item.name }}</span>
    </template>
  </List>
</template>

插槽缩写语法

Vue 提供了简化的插槽语法,使代码更简洁。

vue插槽实现

具名插槽缩写:

<template #header>
  <h1>标题</h1>
</template>

作用域插槽缩写:

<template #default="slotProps">
  <span>{{ slotProps.item.name }}</span>
</template>

动态插槽名

Vue 2.6.0+ 支持动态插槽名,可以根据数据动态确定插槽位置:

<template>
  <Layout>
    <template v-slot:[dynamicSlotName]>
      <p>动态插槽内容</p>
    </template>
  </Layout>
</template>

<script>
export default {
  data() {
    return {
      dynamicSlotName: 'header'
    }
  }
}
</script>

插槽默认内容

可以在子组件中为插槽定义默认内容,当父组件没有提供插槽内容时显示:

<!-- 子组件 Button.vue -->
<template>
  <button>
    <slot>默认按钮文本</slot>
  </button>
</template>

标签: 插槽vue
分享给朋友:

相关文章

vue实现单选

vue实现单选

Vue 实现单选功能 在 Vue 中实现单选功能可以通过多种方式完成,以下是几种常见的方法: 使用 v-model 绑定单选按钮 通过 v-model 绑定一个变量,可以实现单选功能。单选按钮的…

vue循环数组实现

vue循环数组实现

vue循环数组的实现方法 在Vue中循环数组主要通过v-for指令实现,以下是几种常见用法: 基本数组循环 使用v-for指令遍历数组,可以通过(item, index)的语法获取当前项和索引值:…

vue怎么实现页面返回

vue怎么实现页面返回

Vue 实现页面返回的方法 在 Vue 中实现页面返回功能,可以通过以下几种方式完成,具体取决于项目使用的路由模式和技术栈。 使用 Vue Router 的编程式导航 通过 this.$route…

vue怎么实现数据检测

vue怎么实现数据检测

Vue 数据检测的实现方式 Vue 通过响应式系统实现数据检测,核心机制基于 Object.defineProperty(Vue 2)或 Proxy(Vue 3)。以下是具体实现方法: 基于 Vue…

vue实现字母添加排序

vue实现字母添加排序

实现字母添加排序的方法 在Vue中实现字母添加排序功能,可以通过以下步骤完成: 创建Vue实例并定义数据 new Vue({ el: '#app', data: { letters…

vue实现活动倒计时

vue实现活动倒计时

实现活动倒计时的基本思路 在Vue中实现活动倒计时通常需要获取当前时间与活动结束时间的差值,并将其转换为天、小时、分钟、秒的格式展示。通过定时器每秒更新显示的时间。 定义倒计时数据 在Vue组件的…