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 获取到数据但却渲染不到页面上的解决方法
Nov 19 Vue.js
Vue 实现一个简单的鼠标拖拽滚动效果插件
Dec 10 Vue.js
vue 通过base64实现图片下载功能
Dec 19 Vue.js
vue使用require.context实现动态注册路由
Dec 25 Vue.js
vue watch监控对象的简单方法示例
Jan 07 Vue.js
vue实现一个获取按键展示快捷键效果的Input组件
Jan 13 Vue.js
Vue中引入svg图标的两种方式
Jan 14 Vue.js
vue实现轮播图帧率播放
Jan 26 Vue.js
聊聊vue 中的v-on参数问题
Jan 29 Vue.js
Vue全家桶入门基础教程
May 14 Vue.js
Vue实现导入Excel功能步骤详解
Jul 03 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
PHP 存取 MySQL 数据库的一个例子
2006/10/09 PHP
PHP网站备份程序代码分享
2011/06/10 PHP
浅析使用Turck-mmcache编译来加速、优化PHP代码
2013/06/20 PHP
浅析PKI加密解密 OpenSSL
2013/07/01 PHP
代码精简的可以实现元素圆角的js函数
2007/07/21 Javascript
JavaScript 拾漏补遗
2009/12/27 Javascript
如何使用jquery动态加载js,css文件实现代码
2013/04/03 Javascript
js限制文本框只能输入数字方法小结
2014/06/16 Javascript
jQuery实现表格展开与折叠的方法
2015/05/04 Javascript
javascript实现Table间隔色以及选择高亮(和动态切换数据)的方法
2015/05/14 Javascript
页面向下滚动ajax获取数据的实现方法(兼容手机)
2016/05/24 Javascript
Map.vue基于百度地图组件重构笔记分享
2017/04/17 Javascript
基于js原生和ajax的get和post方法以及jsonp的原生写法实例
2017/10/16 Javascript
Mac下安装vue
2018/04/11 Javascript
详解vue项目接入微信JSSDK的坑
2018/12/14 Javascript
浅谈JavaScript闭包
2019/04/09 Javascript
Python正则表达式的使用范例详解
2014/08/08 Python
python实现带声音的摩斯码翻译实现方法
2015/05/20 Python
使用Python编写简单的端口扫描器的实例分享
2015/12/18 Python
用yum安装MySQLdb模块的步骤方法
2016/12/15 Python
Scrapy爬虫实例讲解_校花网
2017/10/23 Python
安装python3的时候就是输入python3死活没有反应的解决方法
2018/01/24 Python
Python利用matplotlib.pyplot绘图时如何设置坐标轴刻度
2018/04/09 Python
利用Django模版生成树状结构实例代码
2019/05/19 Python
基于virtualenv创建python虚拟环境过程图解
2020/03/30 Python
python爬虫把url链接编码成gbk2312格式过程解析
2020/06/08 Python
CSS+jQuery+PHP+MySQL实现的在线答题功能
2015/04/25 HTML / CSS
HTML5 Canvas实现放大镜效果示例
2020/03/25 HTML / CSS
韩国演唱会订票网站:StubHub韩国
2019/01/17 全球购物
捷克家电和家具购物网站:OKAY.cz
2020/07/23 全球购物
自动化系在校本科生求职信
2013/10/23 职场文书
三年级科学教学反思
2014/01/29 职场文书
旅游与环境专业求职信
2014/06/05 职场文书
2016年学习贯彻十八届五中全会精神心得体会
2016/01/05 职场文书
JavaScript 数组去重详解
2021/09/15 Javascript
使用refresh_token实现无感刷新页面
2022/04/26 Javascript