vue2的slot插槽
vue2的slot插槽
1.定义插槽
插槽使用slot标签来标识,并且插槽是放在组件的template模板里面的,vue允许向组件传递模板。Vue 实现了一套内容分发的 API,这套 API 的设计灵感源自 Web Components 规范草案,将 slot元素作为承载分发内容的出口。
定义模板
<!--假设这个组件叫my-com-->
<!--组件模板如下:-->
<template>
<div>
<p>---------------------</p>
<slot name="slotname">这里是slot的默认值</slot>
<p>---------------------</p>
</div>
</template>
使用
使用的时候可以向其传递标签元素,也可以传递组件模板,而name属性是用来命名slot的,当有多个slot是,我们可以通过v-slot:name来指顶要插入的插槽。
<!--不传东西将使用默认值-->
<my-com></my-com>
<!--传递文本-->
<my-com>
我是slot
</my-com>
<!--传递标签元素-->
<my-com>
<a>我是a标签</a>
</my-com>
<!--传递模板,并指定使用哪个slot-->
<my-com>
<template v-slot:slotname>
<h3>模板</h3>
</template>
</my-com>
2.作用域插槽
slot提供的是父级渲染,这句话怎么理解呢?可以回想一下,当我们传递template给slot时,是谁在调用子组件的,是父级调用的子组件的吧,也是父级传递模板到子组件的插槽的吧,那么就可以解释得通,为什么slot提供的是父渲染。
有时我们希望让传递过去的插槽内容能够访问子组件中才有的数据,而这时我们需要一些方法才能访问到子组件的数据,这时就有我们的作用域插槽了。
<!--假设有一个组件叫current-user-->
<!--里面包含了数据
return {user:{
firstname:"li",
lastname:"si"
}
}
-->
<!--模板如下:-->
<template>
<span>
<!--在模板中只有子组件能访问user,而父级是没办法访问user的-->
<slot>{{ user.lastName }}</slot>
</span>
</template>
<!--这是错误的示范:-->
<current-user>
{{ user.firstName }} <!--父级传递模板时是没办法直接访问到user-->
</current-user>
<!--解决方法:-->
<template>
<span>
<!--在插槽处提供一个user属性,这个属性通过v-bind绑定了user数据-->
<slot v-bind:user="user">
{{ user.lastName }}
</slot>
</span>
</template>
<!--我们可以使用带值的 v-slot 来定义我们提供的插槽 prop 的名字-->
<current-user>
<!--这个slotProps代指子组件的props-->
<template v-slot:default="slotProps">
{{ slotProps.user.firstName }}
</template>
</current-user>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)