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中如何自定义右键菜单详解
Dec 08 Vue.js
基于vue+echarts数据可视化大屏展示的实现
Dec 25 Vue.js
vue3.0自定义指令(drectives)知识点总结
Dec 27 Vue.js
vue组件是如何解析及渲染的?
Jan 13 Vue.js
Vue2.x-使用防抖以及节流的示例
Mar 02 Vue.js
详解vue中v-for的key唯一性
May 15 Vue.js
springboot+VUE实现登录注册
May 27 Vue.js
vue基于Teleport实现Modal组件
May 31 Vue.js
Vue中foreach数组与js中遍历数组的写法说明
Jun 05 Vue.js
vue中利用mqtt服务端实现即时通讯的步骤记录
Jul 01 Vue.js
vue ref如何获取子组件属性值
Mar 31 Vue.js
vue组件vue-esign实现电子签名
Apr 21 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
Yii2前后台分离及migrate使用(七)
2016/05/04 PHP
详解PHP变量传值赋值和引用赋值变量销毁
2019/03/23 PHP
PHP扩展类型及安装方式解析
2020/04/27 PHP
对YUI扩展的Gird组件 Part-2
2007/03/10 Javascript
关于javascript中的parseInt使用技巧
2009/09/03 Javascript
不要在cookie中使用特殊字符的原因分析
2010/07/13 Javascript
Jquery + Ajax调用webService实例代码(asp.net)
2010/08/27 Javascript
jquery实现隐藏与显示动画效果/输入框字符动态递减/导航按钮切换
2013/07/01 Javascript
jquery复选框全选/取消示例
2013/12/30 Javascript
jquery插件NProgress.js制作网页加载进度条
2015/06/05 Javascript
jquery插件jquery.LightBox.js实现点击放大图片并左右点击切换效果(附demo源码下载)
2016/02/25 Javascript
将JSON字符串转换成Map对象的方法
2016/11/30 Javascript
js实现彩色条纹滚动条效果
2017/03/15 Javascript
浅谈Vue.js中的v-on(事件处理)
2017/09/05 Javascript
JS中的Replace()传入函数时的用法详解
2017/09/11 Javascript
详解vue+webpack+express中间件接口使用
2018/07/17 Javascript
vue项目中添加单元测试的方法
2018/07/21 Javascript
使用ThinkJs搭建微信中控服务的实现方法
2019/08/08 Javascript
nuxt 页面路由配置,主页轮播组件开发操作
2020/11/05 Javascript
浅析Python中元祖、列表和字典的区别
2016/08/17 Python
Python爬豆瓣电影实例
2018/02/23 Python
对django2.0 关联表的必填on_delete参数的含义解析
2019/08/09 Python
Python paramiko模块使用解析(实现ssh)
2019/08/30 Python
python字典排序的方法
2019/10/12 Python
python列表切片和嵌套列表取值操作详解
2020/02/27 Python
浅谈Python3多线程之间的执行顺序问题
2020/05/02 Python
Django基于Models定制Admin后台实现过程解析
2020/11/11 Python
Django扫码抽奖平台的配置过程详解
2021/01/14 Python
用纯CSS3实现网页中常见的小箭头
2017/10/16 HTML / CSS
化验室技术员岗位职责
2013/12/24 职场文书
新员工欢迎词
2014/01/12 职场文书
小学防溺水制度
2014/01/29 职场文书
就业协议书样本
2014/08/20 职场文书
呐喊读书笔记
2015/06/30 职场文书
工作简报格式范文
2015/07/21 职场文书
DBCA命令行搭建Oracle ADG的流程
2021/06/11 Oracle