news 2026/5/8 4:02:01

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 时提供更好的类型推断。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/3 17:59:51

物联网项目tp5怎么也获取不到请求的参数问题

做一个物联网项目时&#xff0c;thinkPHP5.0用常规的框架方法获取不到设备请求过来的参数&#xff0c;总是空。 最后用 原生PHP获取请求体 的方法得到了参数&#xff0c;也就是用PHP原生的方法获取参数&#xff0c;获取后为字符串&#xff0c;再转换为对象就可以用了 $raw fil…

作者头像 李华
网站建设 2026/4/23 17:32:05

2026牛客网春招面经,BATJ最新10000道Java中高级面试题,限时开源

前言&#xff1a; 想在面试、工作中脱颖而出&#xff1f;想在最短的时间内快速掌握 Java 的核心基础知识点&#xff1f;想要成为一位优秀的 Java 工程师&#xff1f;本篇文章能助你一臂之力&#xff01; 目前正值招聘求职旺季&#xff0c;很多同学对一些新技术名词都能侃侃而…

作者头像 李华
网站建设 2026/5/3 10:40:00

技术面:如何让你的系统抗住高并发的流量?

前言 如何能让系统抗住高并发流量&#xff0c;要考虑的因素有很多&#xff0c;但是真的让你讲一下都有哪些&#xff0c;很多人肯定就会说&#xff0c;用Redis缓存啦&#xff0c;用MQ做解耦啦&#xff0c;总之就是想起来这一块儿就说一嘴&#xff0c;想起来那一块儿也说一嘴&am…

作者头像 李华
网站建设 2026/4/25 18:06:55

南加州大学让AI说话更有口音:语言学规则与神经网络的奇妙对话

当我们听到不同地区的人说英语时&#xff0c;总能轻松区分出美式英语和英式英语的差别。但如果要让计算机生成的语音也具备这种自然的口音变化&#xff0c;事情就变得复杂多了。南加州大学信号分析与解释实验室、计算机科学系和语言学系的研究团队最近在2026年IEEE国际声学、语…

作者头像 李华
网站建设 2026/4/23 12:02:34

面试官:RocketMQ 消息堆积了怎么处理?

面试考察点 面试官提出这个问题&#xff0c;主要希望考察候选人以下几个方面的能力&#xff1a; 问题诊断能力&#xff1a;候选人能否系统性地分析消息堆积的根源&#xff0c;而不仅仅是给出解决方案。这包括区分是 “生产者流量激增” 还是 “消费者消费能力不足” 导致的问题…

作者头像 李华