Vue_使用插槽(slot)

小编 2026-06-28 阅读:888 评论:0
当父组件向子组件传值的时候,有时候,父组件传的并不是单纯的数值、字符串,有可能是带标签(DOM)...

当父组件向子组件传值的时候,有时候,父组件传的并不是单纯的数值、字符串,有可能是带标签(DOM)的数据,那么如何传值呢?

如果我们像正常父向子传值那样操作。

 <slott content="<p>hello,slot</p>"></slott>
  • 1

子组件:

<template> <div class="slott"> <div>{{content1}}</div> </div> </template> <script>export default{ props:['content'], data(){ return{ content1 : this.content, } } } </script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

效果:

这里写图片描述

我们可以看到显示的并不是我们想要的,当然我们可以在子组件在接受的时候,使用v-html。

<template> <div class="slott"> <div v-html='content1'></div> </div> </template>
  • 1
  • 2
  • 3
  • 4
  • 5

效果:

这里写图片描述这里写图片描述

但是缺点是:多生成了一个div标签,那换成template模板占位符呢?是渲染不出来这个效果的。

div标签虽然可以实现,但是如果有很多DOM元素呢?显然不好控制,所以Vue中提供了slot插槽的方式

一.插槽

在父组件中直接插入正常的DOM结构

 <slott> <p>你好solt!</p> </slott>
  • 1
  • 2
  • 3

然后在子组件用<slot>来代替,所以说slot是保留字,不能当做id的

<template> <div class="slott"> <slot></slot> </div> </template> <script>export default{ props:['content'], data(){ return{ content1 : this.content, } } </script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

效果:

这里写图片描述

效果:

这里写图片描述

二.引入header组件

在实际开发中,我们经常会遇到一种情况,将 header和footer传进来。

在父组件中:

<slott> <div>header</div> <div>footer</div> </slott> 
  • 1
  • 2
  • 3
  • 4

在子组件中:

 <slot></slot> <div>content</div> <slot></slot>
  • 1
  • 2
  • 3

结果:

这里写图片描述

这是为什么呢?slot标签代表的显示插槽的所有的内容,那如何达到我们想要的效果呢?我们可以用具名插槽。

父组件的插槽中命名。

<slott> <div slot="header">header</div> <div slot="footer">footer</div> </slott> 
  • 1
  • 2
  • 3
  • 4

在子组件引用名称

 <slot name="header"></slot> <div>content</div> <slot name="footer"></slot>
  • 1
  • 2
  • 3

效果:

这里写图片描述

附:slot标签可以有默认值,如果找不到相关的插槽,就会显示默认值。

在插槽中去掉header

<slott> <div slot="footer">footer</div> </slott> 
  • 1
  • 2
  • 3

在调用的时候找不到header的话,就会显示默认的内容

 <slot name="header">default</slot> <div>content</div> <slot name="footer"></slot>
  • 1
  • 2
  • 3

效果:

这里写图片描述

二.作用域插槽

有时候,我们在使用插槽的时候,希望父组件可以控制插槽的内容,

什么时候用作用域插槽呢?当子组件做循环或者某一部分它的DOM结构应该由外部传递进来的时候,这个时候我们用作用域插槽

使用作用域插槽,子组件会向父组件的作用域里传递数据。

父组件使用插槽,要包含在template标签中。props是自定义的名字

eg:

<slott> <template slot-scope="props"> <h1>{{props.item}}</h1> </template> </slott> 
  • 1
  • 2
  • 3
  • 4
  • 5

子组件往外传递数据:

 <slot  v-for="item of list"  :item=item> </slot>//data中: return{ list:[1,2,3,4] }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

效果:

这里写图片描述

父组件也可以改为li:

<slott> <template slot-scope="props"> <li>{{props.item}}</li> </template> </slott> 
  • 1
  • 2
  • 3
  • 4
  • 5

效果:

这里写图片描述

这样的话,就实现了由父组件决定实现的内容

原文发布时间:06月30日

原文作者:_dalianmiao

本文来源CSDN博客如需转载请紧急联系作者

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
标签列表