Vue Slot 层级、作用域详解

Vue 3 中的 Scope Slot(作用域插槽)详解 在 Vue 中,组件是可复用的 UI 构建块,它们可以封装自己的模板、逻辑和样式。然而,有时候我们希望父组件能够自定义子组件内部的内容展示方式,同时还能访问子组件提供的数据或状态。这就是作用域插槽的作用——它允许父组件向子组件传递数据的同时,保留对这些数据的控制权。 阅读详情

vue slot插槽的作用域在官方教程中有一条说明:
“父级模板里的所有内容都是在父级作用域中编译的;子模板里的所有内容都是在子作用域中编译的。”
父级模版可以通过prop把参数传递给子级模版,但是反过来是不推荐的。
插槽v-slot就是用来反向传参的。

首先来看一下层级关系,一下是html页面中的dom元素实例

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Language" content="zh-cn">
        <title>Template</title>
        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    </head>
    <body>
        <div id="components-demo" level="0">
            <im-level-11 title="how are you." level="1">
                {{ posts[2].title }}
                <im-level-12 :name="posts[1].title" level="1">
                        <template v-slot:default="slotProps">
                            {{ slotProps.user.firstName }} {{ posts[0].title }}
                        </template>
                </im-level-12>
            </im-level-11>
        </div>
        <script src="template.js"></script>
    </body>
</html>

同步对照js代码如下

Vue.component('im-level-11',{
    props:['title'],
    data(){
        return {count: 5,level:2}
    },
    template:`
        <div>
            <label> {{ title }} </label>
            <button @click='count++'>
                You clicked me {{ count }} times.
            </button>
            <slot></slot>
        </div>
    `
});

Vue.component('im-level-12',{
    props:['name'],
    data(){
        return {
            user:{
                lastName:"AJS",
                firstName:"Silvan"
            },
            level:2
        };
    },
    template:`
        <div>
            <label> {{ name }} </label>
            <slot v-bind:user="user"> {{ user.lastName }} </slot>
        </div>
    `
})

var vm = new Vue({
    el: "#components-demo",
    data: {
        posts: [
            { id: 1, title: 'My journey with Vue' },
            { id: 2, title: 'Blogging with Vue' },
            { id: 3, title: 'Why Vue is so fun' }
        ],
        level:1
    }
});

其中components-demo是根节点,在js中vue实例被绑定到了该节点上。
那么components-demo 作为level0
js代码中的vm Vue实例是level1
两个组件im-level-11 im-level-12 实际上是和vm实例同一级的。
在html中可以看到,im-level-11 和 im-level-12 可以直接调用vm实例中的posts数组对象,
虽然im-level-11 和 im-level-12 在html中是嵌套实现的,但是在js中是同级申明的。

在 im-level-11 和 im-level-12 组件内部,作为level2,他们各自的template模版只能直接调用组件内部的数据。

这个时候,子级给父级反向传参可以看im-level-12 的实现
im-level-12 内部有一个user对象,可以直接使用user.lastName值,
而父级level1要直接用同样的user对象则会报错。

在level2的插槽上即 im-level-12的 绑定user,把自己的user对象传去去。
在level1调用组件时直接使用 来接收传出的对象,该对象作为slotProps的属性存在,可以直接用过slotProps.user来访问。

"slotProps"只是一个自定义名称,可以随便改。

这里要吐槽官网的描述,也可能是我理解能力太差,之前一直搞混了。官网有这么一段说明:

<span>
  <slot>{{ user.lastName }}</slot>
</span>

我们想让它的后备内容显示用户的名,以取代正常情况下用户的姓,如下:

<current-user>
  {{ user.firstName }}
</current-user>

我一直没搞明白后备内容不是user.lastName 显示了用户的姓么,怎么又变成名了。还纠结了半天,官网指的lastName难道按照中国人的习惯是名字?

后来终于理解了,现在后备内容区域显示的是姓,要把他用组件改为名字显示。
这一下也终于搞明白,这个user是从子级组件里通过插槽slot传出来给父级组件渲染时调用的。

终于弄明白这个插槽的逻辑了,加油!

图文详解Vue slot和slot-scope的用法和区别 本文通过图文的形式详细介绍了Vue slot和slot-scope的用法和区别,希望能对学习Vue的同学们有所帮助。 文章目录 1. 背景描述 2. 什么是slot 3. slot分类 3.1 默认插槽 3.2 具名插槽 3.3 作用域插槽 4. 2.6之后版本的变化 阅读详情

相关推荐

DoubletFinder实战:如何优化参数提升scRNA-seq双细胞识别准确率?

本文深入探讨了如何通过优化DoubletFinder参数提升scRNA-seq双细胞识别准确率。详细解析了pK和nExp参数的影响机制,提供了系统化的参数优化流程和多样本整合策略,并结合真实数据集演示了验证方法与高级应用场景,帮助研究人员获得更可靠的分析结果。

weixin_28523493的博客 339

vue:slot(插槽)详解:父组件的内容放到子组件指定的位置

目录 slot插槽 应用场景: 作用: 分类 一、单个slot(基本用法) 二、多个slot(具名插槽) 三、作用域插槽(子组件向父组件传值) slot插槽:父组件的内容放到子组件指定的位置 应用场景: 项目中有很多地方需要调用一个组件,比如弹窗,但是内容又不固定,有个可能弹出是表格,有的可能弹出是照片,这个决定于需要调用这个子组件的父组件,这种情况下就可以在自组建(这个弹窗中...

happy81997的博客 1万+

DeepSeek+Coze扣子搭建智能体(保姆级教程)

DeepSeek+Coze扣子搭建智能体(保姆级教程)

yizhen91y的博客 1万+

Vue slot插槽 多层组件传递

多层组件传递slot。

samll_redhat的博客 1895

基于LightGBM和多模型融合的量化交易研究:沪深300为例【附代码】

📊 数据科学与大数据专业 | 数据分析与模型构建 | 数据驱动决策✨ 专业领域:数据挖掘与清洗大数据处理与存储技术机器学习与深度学习模型数据可视化与报告生成分布式计算与云计算数据安全与隐私保护💡 擅长工具:Python/R/Matlab 数据分析与建模Hadoop/Spark 大数据处理平台SQL数据库管理与优化Tableau/Power BI 数据可视化工具TensorFlow/PyTorch 深度学习框架✅数据科学与大数据技术毕业论文【数据】

lagougongzuoshi的博客 1670

芯片设计中的STA实战:如何避免时序违例(含常见问题解析)

本文深入探讨了芯片设计中静态时序分析(STA)的实战应用,重点解析了如何避免时序违例。文章从STA的核心逻辑与约束制定出发,强调了将时序意识植入RTL编码与综合阶段的重要性,并详细介绍了后端物理实现中的时序收敛策略。同时,针对跨时钟域路径误报、多工艺角违例等常见问题提供了深度解析与调试技巧,旨在帮助IC设计工程师系统性地掌握时序分析与优化方法。

open4的博客 513

2020-10-20逆向传值 槽口slot

逆向传值 与 槽口slot 今天主要学习了组件的逆向传值,即子传父。还有槽口的使用,将学习流程图绘制如下:

weixin_48364327的博客 285

避坑指南:在Ubuntu 20.04上从零部署IS-Fusion环境(含CUDA 11.1和PyTorch 1.10.1配置)

本文提供了在Ubuntu 20.04系统上从零部署IS-Fusion 3D目标检测环境的详细避坑指南。内容涵盖CUDA 11.1、PyTorch 1.10.1、spconv等核心组件的精确版本安装与兼容性配置,并指导如何准备nuScenes数据集及启动模型训练,旨在帮助研究者和开发者高效搭建稳定的多模态融合算法开发环境。

gitlab7runner的博客 552

vue 解决position:fixed 遮盖下方元素问题

方法1: 下方的元素第一个设置 margin-top为fixed元素的高度即可。 方法2: 在fixed元素后添加一个空的div盒子,并将高度设置为fixed元素的高度。 延伸扩展:如果fixed高度不确定,该如何处理? 需要动态获取盒子高度并监听其变化,然后动态设置元素的style。 <div> <div id="header" style="position: fixed"> //设置fixed的元素 </div...

weixin_40425415的博客 8868

【2025软考高级架构师】基础知识部分——6、软件架构设计

(1)架构是对系统的抽象(2)架构由多个结构组成(3)任何软件都存在架构(4)元素及其行为的集合构成架构的内容(5)架构具有“基础”性(6)架构隐含有“决策”

qq837993702的博客 1万+

基于 STM32 的校园电动车充电桩智能计费与过载保护系统设计与实现

本系统基于 STM32F103 主控,通过 HLW8032 电能计量芯片实现精准计费,配合继电器实现过载保护,RC522 模块完成刷卡身份识别,整体方案成本低、可靠性高,适合校园电动车集中充电场景的批量部署。软件采用状态机设计,逻辑清晰,可扩展多路充电口、远程监控等功能。

weixin_42300449的博客 58

vue slot作用域插槽 slotProps 传值

子组件 <template> <td v-for="column in columns" :key="`${column.key}_${index}`"> <slot v-if="column.slot" :name="column.key" v-bind:record="item" :index="index" ></slot> </td> </template>

weixin_45835771的博客 4886

模型训练篇 | 手把手教你使用ResNet训练自己数据集和推理,ResNet50通用物体分类识别,含完整代码和数据集,全网最详细教程

手把手教你使用ResNet训练自己数据集和推理,ResNet50通用物体分类识别,含完整代码和数据集,全网最详细教程。本篇文章将带你学习 ResNet50 模型构建、ResNet50训练自己数据集、数据集处理、推理和验证、模型剪枝与模型改进等。 本篇教程适配各种分类识别任务,可以说是一个通用的教程,只需修改自己的数据集即可完成自己领域的任务和系统实现。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 731

VUE作用域插槽详解(<slot>、v-slot、slot-scope)

什么是插槽? 插槽就是子组件中的提供给父组件使用的一个占位符,用 表示,父组件可以在这个占位符中填充任何模板代码,如 HTML、组件等,填充的内容会替换子组件的标签。插槽显不显示、怎样显示是由父组件来控制的,而插槽在哪里显示就由子组件来进行控制 如下代码: 在子组件中放一个占位符 在父组件中给这个占位符填充内容: 展示的效果: 现在来看看,如果子组件中没有放插槽,同样的父组件中在子组件中填充内容,会是啥样的: 子组件代码无插槽: 2. 父组件照常填充内容: 3. 展示的效果: 总结:如果

Don't disturb me!的博客 3万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Vue slot 详解

在Vue中,我们使用组件来组织页面和组织代码,类似于搭积木,每一个组件都是一个积木,使用一些相同或者不同组件就能搭建出我们想要的页面。slot(插槽)是组件功能的重要组成部分,插槽必须用于组件才有意义。它为组件提供了对外的接口,允许从组件外部传递内容,并将这部分内容放置到指定的位置。 使用 slot 当一个组件可能被使用至少两次并且两次使用内容(这里指组件视图的组成)不同时,插槽才有存在的必要。注意: 本文的代码都是基于Vue3编写。 基础用法 Link.vue <template> &lt

huangyilinnuli的博客 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

vue2到vue3中插槽slot变化详解---从slot,slot-scope到v-slot的变化

vue中插槽详解—从slot,slot-scope到v-slot的变化 前言 vue 插槽,目前到3.0有3种方式,第一种,在2.6之前使用的是slot 和 slot-scpe 2.6后已被官方废弃,但在2.x版本仍被支持,第二种是vue 在2.6版本后更新的新指令 v-slot 来替代slot 和slot-scpe 那么什么是插槽呢,作用又是什么 插槽,简单说,插槽就是杯子,杯子里面装的是饮料还是牛奶,由外部倒入什么来决定 ,就好比下面的代码,我需要一个子组件,他有部分内容,需要根据我当前页面需要来展示

marendu的博客 2万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

v-slot的使用与详解

关于v-slot指令的详细了解 相对于v-slot指令,对大家来说都应该不是很陌生,在 2.6.0 中,vue为具名插槽和作用域插槽引入了一个新的统一的语法 (即 v-slot 指令)。它取代了 slot 和 slot-scope 在新版中的应用,当然vue官方暂时还木有删除老版本中具名插槽和作用域插槽的和 slot-scope,也就是说,还可以用,但是不推荐,在vue-cli 3.0将不能使用 具名插槽新的改变 关于v-slot的指令,可以让我们不用再写过多的代码就可以做出slot具名插槽和slot-sc

weixin_44790314的博客 5万+

Vue.js--作用域、slot用法(单个slot、具名slot)详解

作用域 在介绍slot前,需要先知道一个概念:编译的作用域。比如父组件中有如下模板: <child-component> {{message}} <child-component> 这里的message就是一个slot,但是它绑定的是父组件的数据,而不是组件< child-component >的数据。 父组件模板的内容是在父组件作用域内编译,子组件模板的内...

吴声子夜歌的博客 1338

vue的slot(slot具名插槽。slot非具名插槽,slot的作用域,)

vue的slot 1、什么是slot slot是插槽,插即是可以插入,槽就是坑,即是可以再代码中插入 如果子组件模板中不包含插口,那么父组件的内容将会被丢弃。当子组件模板中有一个么有属性的插槽时,父组件传入的整个内容片段,将插入到插槽所在的dom的位置,并替换掉插槽标签本身。 举例: <html> <head> <meta charset="utf-8">...

ljljlj1993的博客 2126

VueJS中的slot插槽

VueJS中的slot插槽语法是定义组件不可获取且非常重要的语法,本篇文章将介绍一下VueJS中slot的学习笔记。 在Vue2.6.0的版本中,Vue团队为具名插槽和作用域插槽引入了一个新的统一语法(v-slot)指令。它取代了slot和slot-scope,但是旧的语法没有被移除 插槽内容 Vue实现了一套内容分发API,这套API的设计灵感源自Web Components规范草案,将&l...

k19970320j的博客 991

Vue中的v-slot详解,作用域插槽和具名插槽

插槽 在2.6.0中,我们为具名插槽和作用域插槽引入了一个新的统一的语法,即v-slot。它取代了slot和slot-scope这两个目前已被废弃但未被移除且仍在文档中的attribute中。 插槽内容 Vue 实现了一套内容分发的 API,这套 API 的设计灵感源自 Web Components 规范草案,将 元素作为承载分发内容的出口。 它允许你像这样合成组件: ...

屈小康 2万+

一文带你吃透Vue_slot、具名、作用域插槽

一文带你吃透Vue_插槽,对vue官方的废弃和更新插槽语法进行了总结,快到文里来

王光迪的优快云 3194

slot多作用域 vue_详解Vue.js 作用域、slot用法(单个slot、具名slot)

作用域在介绍slot前,需要先知道一个概念:编译的作用域。比如父组件中有如下模板:{{message}}这里的message就是一个slot,但是它绑定的是父组件的数据,而不是组件< child-component >的数据。父组件模板的内容是在父组件作用域内编译,子组件模板的内容是在子组件作用域内编译。Vue.component('child-component',{template...

weixin_40004960的博客 112

vue中的slot标签

(二十八)Slot分发内容 ①概述: 简单来说,假如父组件需要在子组件内放一些DOM,那么这些DOM是显示、不显示、在哪个地方显示、如何显示,就是slot分发负责的活。 ②默认情况下 父组件在子组件内套的内容,是不显示的。 例如代码: [html] view plain copy 在CODE上查看代码片 派生到我的代码片 12345 显示内容是一个button按钮,不包含span标签里面的内容; ③单个slot

qq_45550167的博客 3925

vue slot 插槽使用详解

vue 对于前端的重要性不言而喻,日常开发中要用好vue,学会使用插槽是很重要的,且组件的开发也是离不开 slot,无论是移动端或pc都是如此。 下面说说vue slot 的相关知识点:

lwx931449660的博客 7609
上一篇: mysqld: [ERROR] Found option without preceding group in config file ... MySQL\my.ini at line 1
下一篇: sticky footer 提前出滚动条
actionPig
博客等级 码龄19年 7粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值