Vue中插槽使用——默认插槽、具名插槽、作用域插槽

  • 插槽(slot)
    • 默认插槽
    • 具名插槽
    • 作用域插槽

插槽(slot)

  1. 作用:让父组件可以向子组件指定位置插入html结构,也是一种组件间通信的方式,适用于 父组件 ===> 子组件

  2. 分类:默认插槽、具名插槽、作用域插槽

  3. <slot> 元素作为组件模板之中的内容分发插槽。<slot> 元素自身将被替换。

  4. 在 2.6.0 中,我们为具名插槽和作用域插槽引入了一个新的统一的语法 (即 v-slot 指令)。它取代了 slot 和 slot-scope 这两个目前已被废弃但未被移除且仍在文档中的 attribute。

默认插槽

category.vue

<template><div class="category"><h3>{{title}}分类</h3><!-- 定义一个插槽(挖个坑,等着组件的使用者进行填充) --><slot>我是一些默认值,当使用者没有传递具体结构时,我会出现</slot></div>
</template><script>export default {name:'category',props:['title']}
</script><style scoped>.category{background-color: skyblue;width: 200px;height: 300px;}h3{text-align: center;background-color: orange;}video{width: 100%;}img{width: 100%;}
</style>

App.vue

<template><div class="container"><category title="美食" ><img src="https://s3.ax1x.com/2021/01/16/srJlq0.jpg" alt=""></category><category title="游戏" ><ul><li v-for="(g,index) in games" :key="index">{{g}}</li></ul></category><category title="电影"><video controls src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4"></video></category></div>
</template><script>import category from './components/category'export default {name:'App',components:{category},data() {return {foods:['火锅','烧烤','小龙虾','牛排'],games:['红色警戒','穿越火线','劲舞团','超级玛丽'],films:['《教父》','《拆弹专家》','《你好,李焕英》','《小鞋子》']}},}
</script><style scoped>.container{display: flex;justify-content: space-around;}
</style>

显示:

具名插槽

<slot> 元素有一个特殊的 attribute:name。通过该属性可以将内容放在指定的插槽里。

category.vue

<template><div class="category"><h3>{{title}}分类</h3><!-- 定义一个插槽(挖个坑,等着组件的使用者进行填充) --><slot name="center">我是一些默认值,当使用者没有传递具体结构时,我会出现1</slot><slot name="footer">我是一些默认值,当使用者没有传递具体结构时,我会出现2</slot></div>
</template><script>export default {name:'Category',props:['title']}
</script><style scoped>.category{background-color: skyblue;width: 200px;height: 300px;}h3{text-align: center;background-color: orange;}video{width: 100%;}img{width: 100%;}
</style>

App.vue

  • v-slot:xxx 只能添加在 <template> 上(推荐)
  • slot="xxx"可以用在一个普通元素上(自 2.6.0 起被废弃)
<template><div class="container"><category title="美食" ><img slot="center" src="https://s3.ax1x.com/2021/01/16/srJlq0.jpg" alt=""><a slot="footer" href="http://www.atguigu.com">更多美食</a></category><category title="游戏" ><ul slot="center"><li v-for="(g,index) in games" :key="index">{{g}}</li></ul><div class="foot" slot="footer"><a href="http://www.atguigu.com">单机游戏</a><a href="http://www.atguigu.com">网络游戏</a></div></category><category title="电影"><video slot="center" controls src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4"></video><template v-slot:footer><div class="foot"><a href="http://www.atguigu.com">经典</a><a href="http://www.atguigu.com">热门</a><a href="http://www.atguigu.com">推荐</a></div><h4>欢迎前来观影</h4></template></category></div>
</template><script>import category from './components/category'export default {name:'App',components:{category},data() {return {foods:['火锅','烧烤','小龙虾','牛排'],games:['红色警戒','穿越火线','劲舞团','超级玛丽'],films:['《教父》','《拆弹专家》','《你好,李焕英》','《小鞋子》']}},}
</script><style scoped>.container,.foot{display: flex;justify-content: space-around;}h4{text-align: center;}
</style>

作用域插槽

数据在组件的自身,但根据数据生成的结构需要组件的使用者来决定。(games数据在Category组件中,但使用数据所遍历出来的结构由App组件决定)

category.vue

<template><div class="category"><h3>{{title}}分类</h3><slot :games="games" msg="hello">我是默认的一些内容</slot></div>
</template><script>export default {name:'Category',props:['title'],data() {return {games:['红色警戒','穿越火线','劲舞团','超级玛丽'],}},}
</script><style scoped>.category{background-color: skyblue;width: 200px;height: 300px;}h3{text-align: center;background-color: orange;}video{width: 100%;}img{width: 100%;}
</style>

App.vue

  • scope 只可以用于 <template> 元素,其它和 slot-scope 都相同(已被移除)。
  • slot-scope 用于将元素或组件表示为作用域插槽,可以接收传递给插槽的 prop 。(在 2.5.0+ 中替代了 scope,自 2.6.0 起被废弃)
  • 推荐使用v-slot默认插槽只传递参数v-slot="xxx",具名插槽v-slot:名字="xxx"
<template><div class="container"><category title="游戏"><template scope="joney"><ul><li v-for="(g,index) in joney.games" :key="index">{{g}}</li></ul></template></category><category title="游戏"><template scope="{games}"><ol><li style="color:red" v-for="(g,index) in games" :key="index">{{g}}</li></ol></template></category><category title="游戏"><template slot-scope="{games}"><h4 v-for="(g,index) in games" :key="index">{{g}}</h4></template></category><category title="游戏">​     <template v-slot="{games}">​        <h4 v-for="(g,index) in games" :key="index">{{g}}</h4>​      </template>​    </category></div>
</template><script>import category from './components/category'export default {name:'App',components:{category},}
</script><style scoped>.container,.foot{display: flex;justify-content: space-around;}h4{text-align: center;}
</style>

Vue2中插槽使用——默认插槽、具名插槽、作用域插槽相关推荐

  1. 【vue3】 使用JSX实现普通、具名和作用域插槽

    最近在vue3构建的项目中使用到了JSX(不得不说JSX用起来的感觉就是清爽).但是前段时间遇到了一个问题,vue template中的slot插槽如何在JSX中实现呢?查了很久资料.文档都很难找到一 ...

  2. Vue中slot的使用(具名插槽与作用域插槽)

    文章目录 前言 一.什么是插槽 二.前期准备 三.具名插槽的使用 1.子组件配置slot 2.使用者App.vue配置数据 3.结果展示 4.具名插槽总结 四.作用域插槽的使用 1.子组件配置slot ...

  3. 细说Vue作用域插槽,匹配应用场景。

    最近在官方文档中看到,vue新增了一种插槽机制,叫做作用域插槽.要求的版本是2.1.0+. 首先来说一下:顾名思义,所谓作用域插槽,主要就在作用域,需要注意的是(以下几点看不懂不要紧,配合下面的例子, ...

  4. 作用域插槽、slot-scope、v-slot指令

    作用域插槽.slot-scope.v-slot指令 作用域插槽可以让父组件拿到子组件中的数据,并使用. 作用域插槽的使用和scope 子组件 <slot :game="game&quo ...

  5. 【Vue2.0】—默认插槽、具名插槽、作用域插槽(二十四)

    [Vue2.0]-默认插槽.具名插槽.作用域插槽(二十四) 默认插槽.具名插槽 Cateory.vue文件 <template><div class="cateory&qu ...

  6. Vue —— 进阶插槽(slot)(默认插槽、具名插槽和作用域插槽)

    Vue全家桶 系列文章目录 内容 参考链接 Vue2.x - 基础 Vue2.x - 基础 Vue2.x - 进阶(零) 初始化脚手架 Vue2.x - 进阶(一) refs属性.props配置项 V ...

  7. [vue] slot插槽 默认插槽,具名插槽,作用域插槽

    文章目录 插槽 不使用插槽 效果 分析 默认插槽 效果 分析 具名插槽 效果 分析 作用域插槽 效果 分析 再次理解作用域插槽 代码: 默认插槽: 具名插槽 作用域插槽 插槽 作用:让父组件可以向子组 ...

  8. Vue3 slot插槽——(默认插槽、具名插槽、作用域插槽)

    一.认识插槽Slot 在开发中,我们会经常封装一个个可复用的组件: 前面我们会通过props传递给组件一些数据,让组件来进行展示: 但是为了让这个组件具备更强的通用性,我们不能将组件中的内容限制为固定 ...

  9. Vue默认插槽、具名插槽、作用域插槽及使用作用域插槽删除列表项

    Vue默认插槽.具名插槽.作用域插槽及使用作用域插槽删除列表项 1. 默认插槽 父组件标签内写的所有内容都放在插槽中 父组件: <h1>我是父组件</h1><base-b ...

最新文章

  1. ffmpeg 播放器原理
  2. 网页瀑布流效果实现的几种方式
  3. 我对汇编中进位和溢出的理解
  4. 中文 Python 开源资料合集!这应该是最全的了!
  5. 计算机科学 在职双证,计算机专业在职研究生如何获得双证?
  6. kFeedback开源啦
  7. React setStats数组不更新,百思不得其解。
  8. Vue组件间常用的通信方式总结
  9. 鲲鹏性能优化十板斧(三)——网络子系统性能调优
  10. java Stream 流
  11. 华为ipop使用教程_华为ipop下载|
  12. kopernio显示无效程序_daz 无法渲染/没有渲染/渲染不显示/渲染无效?
  13. 简约好看侧边栏(HTML、CSS)
  14. anaconda安装第三方库两种方式
  15. OSPF NSSA区域路由的计算过程与FA值实验
  16. python安装itchat包_Python与微信——itchat包
  17. Python PyAutoGUI模块自动化控制鼠标和键盘
  18. 设置计算机的启动顺序CDROM.C.A,怎么设置开机从光驱启动
  19. 【榜单】机器学习 深度学习近三年被引最多论文 Top 20,图像识别 GAN等(附下载)
  20. 计算机、通信方向学习考证经验分享

热门文章

  1. 用C语言编写2048游戏
  2. 抖音影视类账号涨粉快,影视类账号如何转化变现:国仁楠哥
  3. html的图片滤镜效果,使用 CSS 实现图片的滤镜效果
  4. 基于matlab的通信系统的设计与实现,基于MATLAB的FHSS通信系统设计与实现
  5. 你看到各种各样的漂亮二维码制作都跑不出这8个原理!
  6. excel模板文件下载
  7. 锅炉设备如何实现远程报警监控
  8. Java架构师之路:微服务架构图解和详情
  9. Acer宏碁linux双系统bios被锁、安装类型空白
  10. pycuda安装与使用