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项目利用axios请求接口下载excel
Nov 17 Vue.js
vue el-upload上传文件的示例代码
Dec 21 Vue.js
vue监听滚动事件的方法
Dec 21 Vue.js
vue中配置scss全局变量的步骤
Dec 28 Vue.js
vue+vant 上传图片需要注意的地方
Jan 03 Vue.js
vue.js watch经常失效的场景与解决方案
Jan 07 Vue.js
解决vue项目本地启动时无法携带cookie的问题
Feb 06 Vue.js
vue使用echarts画组织结构图
Feb 06 Vue.js
vue项目多环境配置(.env)的实现
Jul 21 Vue.js
Vue自定义铃声提示音组件的实现
Jan 22 Vue.js
vue中this.$http.post()跨域和请求参数丢失的解决
Apr 08 Vue.js
vue2的 router在使用过程中遇到的一些问题
Apr 13 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
世界上第一台立体声收音机
2021/03/01 无线电
随机广告显示(PHP函数)
2006/10/09 PHP
初识ThinkPHP控制器
2016/04/07 PHP
laravel中的错误与日志用法详解
2016/07/26 PHP
php file_get_contents取文件中数组元素的方法
2017/04/01 PHP
PHP数据库操作四:mongodb用法分析
2017/08/16 PHP
Laravel框架定时任务2种实现方式示例
2018/12/08 PHP
PHP explode()函数用法讲解
2019/02/15 PHP
html下载本地
2006/06/19 Javascript
JavaScript中使用replace结合正则实现replaceAll的效果
2010/06/04 Javascript
用JavaScript计算在UTF-8下存储字符串占用字节数
2013/08/08 Javascript
JavaScript实现向OL列表内动态添加LI元素的方法
2015/03/21 Javascript
JQuery实现样式设置、追加、移除与切换的方法
2015/06/11 Javascript
基于jquery实现表格无刷新分页
2016/01/07 Javascript
ashx文件获取$.ajax()方法发送的数据
2016/05/26 Javascript
AngularJS中$http使用的简单介绍
2017/03/17 Javascript
js评分组件使用详解
2017/06/06 Javascript
使用sessionStorage解决vuex在页面刷新后数据被清除的问题
2018/04/13 Javascript
jQuery实现动态生成年月日级联下拉列表示例
2019/05/11 jQuery
[02:41]DOTA2英雄基础教程 冥魂大帝
2014/01/16 DOTA
[53:15]2018DOTA2亚洲邀请赛3月29日 小组赛A组 LGD VS TNC
2018/03/30 DOTA
Python中函数的用法实例教程
2014/09/08 Python
分享Python字符串关键点
2015/12/13 Python
Python多线程同步---文件读写控制方法
2019/02/12 Python
Python开启线程,在函数中开线程的实例
2019/02/22 Python
利用Vscode进行Python开发环境配置的步骤
2020/06/22 Python
opencv 图像腐蚀和图像膨胀的实现
2020/07/07 Python
基于python模拟TCP3次握手连接及发送数据
2020/11/06 Python
Python做图像处理及视频音频文件分离和合成功能
2020/11/24 Python
弄清Pytorch显存的分配机制
2020/12/10 Python
使用HTML5中的contentEditable来将多行文本自动增高
2016/03/01 HTML / CSS
ABOUT YOU匈牙利:500个最受欢迎的时尚品牌
2019/07/19 全球购物
创先争优活动方案
2014/02/12 职场文书
大学生志愿者活动总结
2014/06/27 职场文书
教师学期末个人总结
2015/02/13 职场文书
redis击穿 雪崩 穿透超详细解决方案梳理
2022/03/17 Redis