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-router定义元信息meta操作
Dec 07 Vue.js
vue从后台渲染文章列表以及根据id跳转文章详情详解
Dec 14 Vue.js
vue 实现基础组件的自动化全局注册
Dec 25 Vue.js
浅谈Vue开发人员的7个最好的VSCode扩展
Jan 20 Vue.js
用vite搭建vue3应用的实现方法
Feb 22 Vue.js
使用Vue.js和MJML创建响应式电子邮件
Mar 23 Vue.js
vite+vue3.0+ts+element-plus快速搭建项目的实现
Jun 24 Vue.js
idea编译器vue缩进报错问题场景分析
Jul 04 Vue.js
一起来看看Vue的核心原理剖析
Mar 24 Vue.js
vue实现列表拖拽排序的示例代码
Apr 08 Vue.js
vue3.0 数字翻牌组件的使用方法详解
Apr 20 Vue.js
详解Vue3使用axios的配置教程
Apr 29 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
mysql5写入和读出乱码解决
2006/11/25 PHP
php ob_flush,flush在ie中缓冲无效的解决方法
2010/05/09 PHP
php检测iis环境是否支持htaccess的方法
2014/02/18 PHP
php使用Jpgraph绘制饼状图的方法
2015/06/10 PHP
微信封装的调用微信签名包的类库
2017/06/08 PHP
js的event详解。
2006/09/06 Javascript
jQuery 剧场版 你必须知道的javascript
2009/05/27 Javascript
myeclipse安装jQuery插件的方法
2011/03/29 Javascript
使用JS或jQuery模拟鼠标点击a标签事件代码
2014/03/10 Javascript
AngularJS入门教程(一):静态模板
2014/12/06 Javascript
jquery京东商城双11焦点图多图广告特效代码分享
2015/09/06 Javascript
聊一聊JS中的prototype
2016/09/29 Javascript
JQuery PHP图片在线裁剪实例
2020/07/27 Javascript
Angular2表单自定义验证器的实现
2016/10/19 Javascript
jQuery命名空间与闭包用法示例
2017/01/12 Javascript
老生常谈jquery id选择器和class选择器的区别
2017/02/12 Javascript
js正则取值的结果数组调试方法
2018/10/10 Javascript
微信{"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]"}
2018/10/12 Javascript
echarts 使用formatter 修改鼠标悬浮事件信息操作
2020/07/20 Javascript
vue select 获取value和lable操作
2020/08/28 Javascript
JavaScript实现世界各地时间显示
2020/09/07 Javascript
[01:15:15]VG VS EG Supermajor小组赛B组胜者组第一轮 BO3第二场 6.2
2018/06/03 DOTA
Python基础学习之类与实例基本用法与注意事项详解
2019/06/17 Python
在pycharm下设置自己的个性模版方法
2019/07/15 Python
Python搭建代理IP池实现检测IP的方法
2019/10/27 Python
Python实现打印实心和空心菱形
2019/11/23 Python
python:HDF和CSV存储优劣对比分析
2020/06/08 Python
澳大利亚优惠网站:Deals.com.au
2019/07/02 全球购物
毕业自我鉴定怎么写
2014/03/25 职场文书
服务标语口号
2014/07/01 职场文书
村主任群众路线教育实践活动个人对照检查材料思想汇报
2014/10/01 职场文书
工作简历自我评价
2015/03/11 职场文书
2015年学校政教处工作总结
2015/05/26 职场文书
春风化雨观后感
2015/06/11 职场文书
周一给客户的问候语
2015/11/10 职场文书
Canvas三种动态画圆实现方法说明(小结)
2021/04/16 Javascript