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与element实现创建试卷相关功能(实例代码)
Dec 07 Vue.js
vue-cli4.0多环境配置变量与模式详解
Dec 30 Vue.js
通过vue.extend实现消息提示弹框的方法记录
Jan 07 Vue.js
vue自定义组件实现双向绑定
Jan 13 Vue.js
vue组件是如何解析及渲染的?
Jan 13 Vue.js
vue穿梭框实现上下移动
Jan 29 Vue.js
如何在vue中使用video.js播放m3u8格式的视频
Feb 01 Vue.js
vue中三级导航的菜单权限控制
Mar 31 Vue.js
如何理解Vue前后端数据交互与显示
May 10 Vue.js
vue 实现上传组件
May 31 Vue.js
解决vue自定义组件@click点击失效问题
Apr 30 Vue.js
vue项目如何打包之项目打包优化(让打包的js文件变小)
Apr 30 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
smarty模板中拼接字符串的方法
2014/02/14 PHP
PHP中读取文件的8种方法和代码实例
2014/08/05 PHP
PHP给前端返回一个JSON对象的实例讲解
2018/05/31 PHP
JQuery在光标位置插入内容的实现代码
2010/06/18 Javascript
幻灯片带网页设计中的20个奇妙应用示例小结
2012/05/27 Javascript
extjs3 combobox取value和text案例详解
2013/02/06 Javascript
jQuery中$.each使用详解
2015/01/29 Javascript
js上传图片及预览功能实例分析
2015/04/24 Javascript
jquery插件splitScren实现页面分屏切换模板特效
2015/06/16 Javascript
jQuery 监控键盘一段时间没输入
2016/04/22 Javascript
浅谈js中调用函数时加不加括号的问题
2016/07/28 Javascript
jQuery实现移动端手机商城购物车功能
2016/09/24 Javascript
Javascript使用uploadify来实现多文件上传
2016/11/16 Javascript
微信小程序开发(一) 微信登录流程详解
2017/01/11 Javascript
MUI 上拉刷新/下拉加载功能实例代码
2017/04/13 Javascript
nodejs 图解express+supervisor+ejs的用法(推荐)
2017/09/08 NodeJs
傻瓜式vuex语法糖kiss-vuex整理
2018/12/21 Javascript
js微信分享接口调用详解
2019/07/23 Javascript
详解小程序如何动态绑定点击的执行方法
2019/11/26 Javascript
jquery实现简单拖拽效果
2020/07/20 jQuery
[01:01:51]EG vs VG Supermajor小组赛B组 BO3 第二场 6.2
2018/06/03 DOTA
Python实现的数据结构与算法之快速排序详解
2015/04/22 Python
Python3读取文件常用方法实例分析
2015/05/22 Python
Python 机器学习库 NumPy入门教程
2018/04/19 Python
pycharm 安装JPype的教程
2019/08/08 Python
在Pytorch中使用样本权重(sample_weight)的正确方法
2019/08/17 Python
对Python中一维向量和一维向量转置相乘的方法详解
2019/08/26 Python
Python字符串和正则表达式中的反斜杠('\')问题详解
2019/09/03 Python
python 给图像添加透明度(alpha通道)
2020/04/09 Python
Python-jenkins模块之folder相关操作介绍
2020/05/12 Python
高档奢华时装在线目的地:FORWARD by elyse walker
2017/10/16 全球购物
意大利一家专营包包和配饰的网上商店:Borse Last Minute
2019/08/26 全球购物
什么是Connection-oriented Protocol/Connectionless Protocol面向连接的协议/无连接协议
2012/09/06 面试题
应届生自荐信范文
2014/02/21 职场文书
2014社区健康教育工作总结
2014/12/16 职场文书
股东协议书范本2016
2016/03/21 职场文书