当前位置: 首页 > news >正文

Vue 3 中的具名插槽仍然完全支持,Vue 2 的旧语法 Vue 3 中已废弃

Vue3中具名插槽的使用方式更加统一和简洁。


新版本采用v-slot指令(简写为#)替代Vue2的slot和slot-scope属性,支持默认插槽、具名插槽和作用域插槽。


子组件通过name属性定义插槽,父组件使用#插槽名语法插入内容。


Vue3还增强了动态插槽名支持和参数解构功能,废弃了旧语法,使插槽使用更加一致,特别是在TypeScript环境下提供更好的类型推断。


Vue 3 中的具名插槽仍然完全支持,而且语法更加统一和一致。


以下是 Vue 3 中具名插槽的使用方式:


1. 基础具名插槽使用

子组件:BaseLayout.vue

vue

<template> <div class="container"> <header> <!-- 具名插槽:header --> <slot name="header"></slot> </header> <main> <!-- 默认插槽 --> <slot></slot> <!-- 或者明确指定默认插槽 --> <slot name="default"></slot> </main> <footer> <!-- 具名插槽:footer --> <slot name="footer"></slot> </footer> </div> </template>

父组件使用:

vue

<template> <BaseLayout> <!-- Vue 3 的新语法:v-slot 指令 --> <template v-slot:header> <h1>这里是页头</h1> </template> <!-- 默认插槽内容(两种写法都可以) --> <p>这里是主要内容</p> <!-- 或者明确指定默认插槽 --> <template v-slot:default> <p>这里是主要内容</p> </template> <!-- 具名插槽:footer --> <template v-slot:footer> <p>这里是页脚</p> </template> </BaseLayout> </template>

2. 简写语法(推荐)

Vue 3 推荐使用简写语法#

vue

<template> <BaseLayout> <!-- 简写:使用 # 代替 v-slot: --> <template #header> <h1>这里是页头</h1> </template> <!-- 默认插槽的简写 --> <p>这里是主要内容</p> <!-- 或者 --> <template #default> <p>这里是主要内容</p> </template> <template #footer> <p>这里是页脚</p> </template> </BaseLayout> </template>

3. 作用域插槽(带参数的插槽)

子组件:CurrentUser.vue

vue

<template> <slot name="default" :user="user" :age="age"></slot> <!-- 或者具名作用域插槽 --> <slot name="info" :user="user" :age="age"></slot> </template> <script setup> import { ref } from 'vue' const user = ref('张三') const age = ref(25) </script>

父组件接收插槽参数:

vue

<template> <CurrentUser> <!-- 接收默认插槽的参数 --> <template v-slot:default="slotProps"> <p>用户:{{ slotProps.user }},年龄:{{ slotProps.age }}</p> </template> <!-- 具名作用域插槽 --> <template #info="{ user, age }"> <p>信息:{{ user }}({{ age }}岁)</p> </template> </CurrentUser> </template>

4. 动态插槽名

vue

<template> <BaseLayout> <template #[dynamicSlotName]> <p>动态插槽内容</p> </template> <!-- 使用动态插槽名 --> <template v-slot:[headerSlot]> <h1>动态页头</h1> </template> </BaseLayout> </template> <script setup> import { ref } from 'vue' const dynamicSlotName = ref('header') const headerSlot = ref('header') </script>

5. 多个插槽的简写和解构

vue

<template> <TodoList :todos="todos"> <!-- 解构插槽参数并使用重命名 --> <template #default="{ item: todo, index }"> <div class="todo-item"> <span>{{ index + 1 }}. {{ todo.text }}</span> <span v-if="todo.completed">✓</span> </div> </template> </TodoList> </template> <script setup> import { ref } from 'vue' const todos = ref([ { text: '学习 Vue 3', completed: true }, { text: '学习 TypeScript', completed: false } ]) </script>

6. 与 Vue 2 的对比

特性Vue 2Vue 3
语法slot="name"v-slot:name#name
作用域插槽slot-scopev-slot统一处理
默认插槽匿名内容#default或匿名内容
动态插槽名有限支持完全支持

Vue 2 的旧语法(Vue 3 中已废弃):

vue

<!-- Vue 2 旧语法(Vue 3 中不支持) --> <BaseLayout> <template slot="header"> <h1>页头</h1> </template> <p slot="default">内容</p> <template slot="footer" slot-scope="props"> <p>页脚 {{ props.data }}</p> </template> </BaseLayout>

7. 注意事项

  1. 废弃的语法slotslot-scope属性在 Vue 3 中已废弃

  2. v-slot 只能用于<template>:不能直接用在普通元素上

  3. 默认插槽的两种写法

    vue

    <!-- 写法1:匿名内容 --> <Child>默认内容</Child> <!-- 写法2:明确指定 --> <Child> <template #default> 默认内容 </template> </Child>

总结

Vue 3没有废弃具名插槽,而是:

  1. 统一了语法:使用v-slot指令处理所有插槽

  2. 提供了简写#符号

  3. 增强了功能:更好的类型支持和动态插槽

  4. 废弃了旧语法:移除了slotslot-scope属性


这种改变让插槽语法更加一致和强大,特别是在使用 TypeScript 时提供更好的类型推断。

http://www.jsqmd.com/news/298585/

相关文章:

  • 2026年全国靠谱的股权激励公司排名,创锟股权激励咨询实力入选值得关注
  • 鱼乐圈自助ktv音效好不好,分享值得选择的店铺排名
  • 盘点2026易切削钢专业厂家,宁波、杭州优质厂商Top10
  • 2026年重点关注金属制造企业,金轮精密的服务水平靠谱吗?
  • 详细介绍:Nature Communications|3D 打印仿生 SA-II 神经,让假肢感知拉伸
  • 2026年金属带材电镀源头厂家排名,重庆地区优质企业全揭秘
  • 读书笔记二:团队协作视角下,软件开发的流程与方法
  • 2026年地暖网片品牌深度评测与采购决策指南
  • Python篇---代码性能测试
  • Python篇---提升Python代码性能
  • 救命神器2026最新!8款AI论文工具测评:继续教育写作全攻略
  • 亲测好用10个AI论文工具,本科生搞定毕业论文!
  • 技术问题记录20260125
  • 北京写真馆品牌排名|宝藏款真实测评北京二十四桥又登顶啦!
  • 佐治亚理工学院团队破解AI智能体融合难题
  • 基于MATLAB的可见光通信(VLC)系统仿真
  • 2026年揭秘AI搜索优化服务推荐哪家,蓝戈链企实力上榜
  • 2026年性价比高的股权激励咨询品牌企业推荐,创锟咨询凸显优势
  • 中鼓数据规模究竟怎么样,它在行业内影响力排行多少?
  • 盘点2026安全帽推荐厂商,无锡华信安全设备性价比值得关注
  • 分析质量好的农业水泵哪里买,揭晓高性价比厂家
  • 2026年电镀金加工服务商厂家排名,哪些品牌更靠谱?
  • SCB 10X推出Typhoon OCR:让泰文文档识别变得轻松简单
  • 弗吉尼亚大学等机构突破:AI医生实现十三种语言个性化诊疗
  • 哥本哈根大学新发现:AI事实核查中,证据比解释更重要
  • Roots.ai团队推出GutenOCR:让AI既能读字又能精准定位
  • 深入解析:开源鸿蒙-基于Flutter搭建GitCode口袋工具-2
  • 物联网项目tp5怎么也获取不到请求的参数问题
  • D8 24. 两两交换链表中的节点
  • 2026.1.25