Vue深入理解插槽slot的使用


Posted in Vue.js onAugust 05, 2022

一、插槽(slot)是什么

slot是组件内的一个占位符,该占位符可以在后期使用自己的标记语言填充。

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

例子:

//父组件中
<Category>
	<div>html结构</div>
</Category>
//子组件中:
<template>
	<div>
		<slot>插槽的默认内容</slot>
	</div>
</template>

二、使用场景

  • 通过插槽可以让用户拓展组件,去更好地复用组件和对其做定制化处理;
  • 如果父组件在使用到一个复用组件的时候,这个组件在不同的地方有少量的更改,如果去重写组件是很浪费,这时,通过slot插槽向组件内部指定位置传递内容,完成这个复用组件在不同场景的应用。
  • 比如:布局组件、表格列、下拉选项、弹框显示内容等。

三、slot的分类

默认插槽

子组件用<slot>来标记渲染的位置,在父组件的自定义标签中写slot中的结构。如果在子组件的<slot>中写了结构,那么会作为默认显示的内容。

//父组件(数据在父组件中)
<template>
  <div id="app">
    <Category title="美食">
      <ul>
        <li v-for="(item,key) in foods" :key="key">{{item}}</li>
    </ul>
    </Category>
    <Category title="游戏">
     <ul>
        <li v-for="(item,key) in games" :key="key">{{item}}</li>
    </ul>
    </Category>
    <Category title="电影"></Category>
  </div>
</template>
//子组件
<template>
  <div class="category">
    <h3>{{title}}分类</h3>
    <slot>默认显示内容</slot>
  </div>
</template>

效果:

Vue深入理解插槽slot的使用

具名插槽

为每个slot标记名字,也是处理具有多个插槽时的对应关系,标记名字的方法有两个:

方法1:

//父组件
<Category title="美食">
<ul slot="foods">
   <li v-for="(item,key) in foods" :key="key">{{item}}</li>
</ul>
</Category>
//子组件
<h3>{{title}}分类</h3>
<slot name="foods">默认显示内容</slot>     /*给插槽取名*/

方法2:此时必须标记在template标签上

<template v-slot:foods>
    <ul>
      <li v-for="(item,key) in foods" :key="key">{{item}}</li>
  </ul>
</template>

作用域插槽

当元素在子组件中时,想实现上述操作,就会造成数据获取不到的问题,这时就可以使用作用域插槽,作用域这三个字就体现在数据的作用域上。

//父组件
<template>
  <div id="app">
    <Category title="美食">
      <template scope="foods">
        <ul>
          <li v-for="(item, key) in foods.foods" :key="key">{{ item }}</li>
        </ul>
      </template>
    </Category>
    <Category title="美食">
      <template scope="foods">
      <!-- <template slot-scope="foods"> -->
        <ol>
          <li v-for="(item, key) in foods.foods" :key="key">{{ item }}</li>
        </ol>
      </template>
    </Category>
  </div>
</template>
//子组件:数据在子组件中
<template>
  <div class="category">
    <h3>{{ title }}分类</h3>
    <slot :foods="foods">默认显示内容</slot>
  </div>
</template>

可以通过解构获得slot-scope={foods},还可以重命名slot-scope={new:foods}

四、介绍对slot的理解

回答:slot就是插槽,主要的作用就是拓展组件,在重复使用一个组件的时候可以通过少量的修改就达到复用的效果。分成默认插槽、具名插槽和作用域插槽。其中前两个都是元素在父组件中,拓展的结构也在父组件中,直接在子组件中占位,在父组件中添加结构即可,区别就是具名插槽给插槽取了名字,多个插槽存在时可以一一对应。而作用域插槽的数据在子组件中,扩展的结构要在父组件中,这是就要利用slot进行子===>父的通信,给数据一个新的作用域,因此叫做作用域插槽。

到此这篇关于Vue深入理解插槽slot的使用的文章就介绍到这了,更多相关Vue slot内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
Vue组件生命周期运行原理解析
Nov 25 Vue.js
element-plus一个vue3.xUI框架(element-ui的3.x 版初体验)
Dec 02 Vue.js
对vue生命周期的深入理解
Dec 03 Vue.js
vue实现一个获取按键展示快捷键效果的Input组件
Jan 13 Vue.js
Vue仿Bibibili首页的问题
Jan 21 Vue.js
Vue ​v-model相关知识总结
Jan 28 Vue.js
详解Vue3.0 + TypeScript + Vite初体验
Feb 22 Vue.js
原生JS封装vue Tab切换效果
Apr 28 Vue.js
vue项目中的支付功能实现(微信支付和支付宝支付)
Feb 18 Vue.js
vue整合百度地图显示指定地点信息
Apr 06 Vue.js
vue3引入highlight.js进行代码高亮的方法实例
Apr 08 Vue.js
Vue Element plus使用方法梳理
Dec 24 Vue.js
vue3 自定义图片放大器效果的示例代码
Jul 23 #Vue.js
vue递归实现树形组件
Jul 15 #Vue.js
VUE递归树形实现多级列表
Jul 15 #Vue.js
Vue2项目中对百度地图的封装使用详解
vue如何在data中引入图片的正确路径
Jun 05 #Vue.js
Vue Mint UI mt-swipe的使用方式
Jun 05 #Vue.js
vue @ ~ 相对路径 路径别名设置方式
Jun 05 #Vue.js
You might like
《五等分的花嫁》漫画完结!2020年10月第2期TV动画制作组换血!
2020/03/06 日漫
PHP 内存缓存加速功能memcached安装与用法
2009/09/03 PHP
PHP ? EasyUI DataGrid 资料存的方式介绍
2012/11/07 PHP
php数组分页实现方法
2016/04/30 PHP
PHP实现无限极分类的两种方式示例【递归和引用方式】
2019/03/25 PHP
jQuery ctrl+Enter shift+Enter实现代码
2010/02/07 Javascript
jQuery队列控制方法详解queue()/dequeue()/clearQueue()
2010/12/02 Javascript
javascript写的异步加载js文件函数(支持数组传参)
2014/06/07 Javascript
对JavaScript中this指针的新理解分享
2015/01/31 Javascript
JS实现仿Windows7风格的网页右键菜单效果代码
2015/09/11 Javascript
jQuery中each()、find()和filter()等节点操作方法详解(推荐)
2016/05/25 Javascript
js在ie下打开对话窗口的方法小结
2016/10/24 Javascript
PHP+jquery+ajax实现分页
2016/12/09 Javascript
AngularJS Controller作用域
2017/01/09 Javascript
Bootstrap进度条与AJAX后端数据传递结合使用实例详解
2017/04/23 Javascript
vue中路由验证和相应拦截的使用详解
2017/12/13 Javascript
基于Koa2写个脚手架模拟接口服务的方法
2018/11/27 Javascript
JS使用Prim算法和Kruskal算法实现最小生成树
2019/01/17 Javascript
使用Node.js实现base64和png文件相互转换的方法
2020/03/11 Javascript
JavaScript异步操作的几种常见处理方法实例总结
2020/05/11 Javascript
vue实现公告栏文字上下滚动效果的示例代码
2020/06/16 Javascript
Python调用命令行进度条的方法
2015/05/05 Python
Python小工具之消耗系统指定大小内存的方法
2018/12/03 Python
Python 执行矩阵与线性代数运算
2020/08/01 Python
python 基于opencv去除图片阴影
2021/01/26 Python
HTML5超炫酷粒子效果的进度条的实现示例
2019/08/23 HTML / CSS
Mio Skincare英国官网:身体紧致及孕期身体护理
2018/08/19 全球购物
J2EE模式面试题
2016/10/11 面试题
师范毕业生求职自荐信
2013/09/25 职场文书
企业厂务公开实施方案
2014/03/26 职场文书
党的群众路线教育实践活动个人承诺书
2014/05/22 职场文书
党员检讨书范文
2014/12/27 职场文书
python基础之匿名函数详解
2021/04/21 Python
学会Python数据可视化必须尝试这7个库
2021/06/16 Python
python opencv将多个图放在一个窗口的实例详解
2022/02/28 Python
Vue如何清空对象
2022/03/03 Vue.js