前端进阶之旅前端进阶之旅
  • 基础篇HTML/CSS/JS 打底
  • 进阶篇原理与工程化
  • 高频篇面试最常问的那批
  • 精选篇按模块收敛的总结
  • 手写篇常考代码手写实现
  • 面经篇真实面试问题复盘
  • AI 篇NEWAI 时代的前端考点
  • 历年面经NEW按年份追踪真实考点
  • 每日一题每天一道,攒手感
  • 专项自测100 题快速查漏
  • 小程序题库小程序专项刷题
  • 算法题库NEW在线编码即时判题
  • 知识卡片NEW碎片时间过考点
  • 面试题大全常见问题解析
  • AI 答疑NEW随时提问,即时解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • AI 定制路线NEW按你的简历现排
  • AI 知识地图NEW串起全站知识点
  • 原理篇React / Vue 源码拆解
  • HTTP从报文一路讲到 HTTPS
  • 浏览器渲染、事件循环、进程
  • 计算机基础Linux、网络、操作系统
  • 设计模式23 种模式怎么用
  • Node学习指南从环境搭建到服务端
  • NPM工作流script、依赖与发布
  • Docker容器化部署上手
  • Canvas图形与动画实战
  • 前端系统进阶学习大型项目工程化
  • 前端综合文章长期沉淀的实践文
  • 思维导图知识点全景图
  • 学习路线按图索骥不跑偏
  • AI 热点NEWAI 每日动态
  • 公众号动态公众号历史文章
  • 博客动态站长的技术博客
  • 开发者导航常用工具与文档站
  • 基础篇HTML/CSS/JS 打底
  • 进阶篇原理与工程化
  • 高频篇面试最常问的那批
  • 精选篇按模块收敛的总结
  • 手写篇常考代码手写实现
  • 面经篇真实面试问题复盘
  • AI 篇NEWAI 时代的前端考点
  • 历年面经NEW按年份追踪真实考点
  • 每日一题每天一道,攒手感
  • 专项自测100 题快速查漏
  • 小程序题库小程序专项刷题
  • 算法题库NEW在线编码即时判题
  • 知识卡片NEW碎片时间过考点
  • 面试题大全常见问题解析
  • AI 答疑NEW随时提问,即时解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • AI 定制路线NEW按你的简历现排
  • AI 知识地图NEW串起全站知识点
  • 原理篇React / Vue 源码拆解
  • HTTP从报文一路讲到 HTTPS
  • 浏览器渲染、事件循环、进程
  • 计算机基础Linux、网络、操作系统
  • 设计模式23 种模式怎么用
  • Node学习指南从环境搭建到服务端
  • NPM工作流script、依赖与发布
  • Docker容器化部署上手
  • Canvas图形与动画实战
  • 前端系统进阶学习大型项目工程化
  • 前端综合文章长期沉淀的实践文
  • 思维导图知识点全景图
  • 学习路线按图索骥不跑偏
  • AI 热点NEWAI 每日动态
  • 公众号动态公众号历史文章
  • 博客动态站长的技术博客
  • 开发者导航常用工具与文档站
首页程序员面试题库Vue 具名插槽 v-slot
VuVue组件与模板

Vue 具名插槽如何定义与使用,v-slot 的简写是什么?

具名插槽把一个组件的多个结构区域变成清楚的内容通道,父级可以按名称逐个提供。

前端进阶之旅 · 一题精讲更新于 2026.09.06
Vue#组件与模板
先看核心答案读代码示例
理解线索

一个组件可以公开多条内容通道

  1. header标题、图标或导航等顶部内容
  2. default未命名的主体内容
  3. actions按钮与操作区内容

名称属于组件公开 API,改名会让调用方内容落空,应像 prop 一样稳定维护。

核心回答

先记住这个答案

子组件通过 <slot name="header">、<slot name="actions"> 定义具名出口,没有 name 的出口名称是 default。父级用 <template v-slot:header> 提供内容,简写为 <template #header>;默认插槽可以写 #default。名称也支持动态参数,例如 #[activeSlot],但表达式必须满足动态指令参数限制,并且运行时名称要和子组件出口完全匹配。v-slot 应写在组件标签或直接包裹插槽内容的 template 上,不能随意放到普通 HTML 元素。

  • slot 的 name 定义通道
  • v-slot:name 可简写为 #name
  • 动态插槽名在运行时匹配出口

出口名称定义布局角色

子组件负责卡片骨架,父级决定每个区域的实际节点。具名插槽比传入大段 HTML 字符串安全,也比为每种按钮组合增加 prop 更灵活。默认插槽保留最常见主体,让调用方不必给唯一主要内容重复命名。

名称应描述结构角色而不是当前样式,例如 actions 比 blueButtons 更能承受设计变化。组件还可以为某个具名出口提供后备节点,未提供时保持完整布局或直接省略区域。

模板语法与渲染函数契约一致

下例 CardShell 在渲染函数中调用 header、default 和 actions 三个插槽,父级以同名函数提供节点。模板版本对应 #header、默认内容和 #actions。

插槽函数可能不存在,因此库组件调用前要判空;也可以用可选调用或后备数组。不要在 setup 顶层调用后缓存结果,应该让每轮渲染取得当前父级状态。

三个具名内容通道TypeScript
import { defineComponent, h } from 'vue'

const CardShell = defineComponent({
  setup(_props, { slots }) {
    return () => h('article', [
      h('header', slots.header?.() ?? [h('h2', '默认标题')]),
      h('main', slots.default?.()),
      h('footer', slots.actions?.())
    ])
  }
})

const ProfileCard = () => h(CardShell, null, {
  header: () => h('h2', '个人资料'),
  default: () => h('p', '主体'),
  actions: () => h('button', '保存')
})

三个函数名对应三个出口。若省略 header,组件显示默认标题;省略 actions 时 footer 没有子节点,是否连 footer 一起隐藏应由组件布局契约决定。

动态名称适合配置化区域

<template #[activeSlot]> 可以把一份内容投向运行时选定的出口,常用于表格单元格或配置驱动布局。它增加了静态分析难度,拼写错误不会自动找到最相近名称,因此应把允许名称收窄成联合类型或配置枚举。

动态名称不是用来绕过稳定 API 的万能入口。若每个消费者都拼接任意 slot 名,组件升级难以发现破坏性变化;大型组件可以导出允许的列键或在测试中遍历配置确认每个出口存在。

回答前,多想一步

容易答错的地方

把 # 当作独立属性名使用
#header 是 v-slot:header 的简写,必须带名称;只有存在默认参数时才写 #default,不能只写一个裸 #。
在普通 div 上使用 v-slot
v-slot 面向组件提供的插槽或 template 包装器。普通元素没有组件插槽上下文,语法位置错误会导致编译提示或内容不按预期归类。
试着用自己的话回答

面试官还会怎么问?

默认插槽为什么有时要显式写 #default?

当同一组件同时使用多个具名 template,且默认内容也需要接收 slot props 或避免作用域歧义时,显式 #default 更清楚。

具名插槽能传参数吗?

能。子组件在对应 <slot name="header" :item="item"> 上传出 props,父级在 #header="{ item }" 中接收;名称选择和数据传递是两个独立维度。

怎样判断 actions 插槽是否提供?

setup 中通过 slots.actions 是否存在判断,模板中可检查 $slots.actions。若函数存在但条件渲染为空,是否隐藏容器还需更明确的接口。

从一道题,走向一组知识

把知识连起来

组件与模板

Vue 插槽的内容在父子组件中分别由谁编译和渲染,默认内容何时生效?

默认内容与父子作用域是具名通道的基础。

组件与模板

Vue 中未声明的属性和事件监听器会怎样透传?

插槽按名称进入出口,非 prop 属性则按透传规则处理。

组件与模板

Vue 中自定义事件名推荐用什么大小写形式,模板中监听时如何对应?

插槽名与事件名一样属于组件公开且需要稳定维护的名称。

参考资料

  • Vue:具名插槽
  • Vue:动态插槽名称

示例用于理解所注明的运行环境与边界;延伸学习可结合原文中的更多案例。

本题目录
  1. 先记住这个答案
  2. 出口名称定义布局角色
  3. 模板语法与渲染函数契约一致
  4. 动态名称适合配置化区域
  5. 容易答错的地方
  6. 面试官还会怎么问
  7. 把知识连起来
读懂,再试着讲出来

先看核心答案,再读代码。最后展开追问,检查自己有没有遗漏边界。

试着回答追问
浏览全部面试题理解原理,也关注真实的使用场景。回到顶部 ↑