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-cli3没有vue.config.js文件夹及配置vue项目域名的问题
Dec 04 Vue.js
vuex Module将 store 分割成模块的操作
Dec 07 Vue.js
Vue实现点击当前行变色
Dec 14 Vue.js
基于vue+echarts数据可视化大屏展示的实现
Dec 25 Vue.js
基于vuex实现购物车功能
Jan 10 Vue.js
使用vue3重构拼图游戏的实现示例
Jan 25 Vue.js
vue 使用饿了么UI仿写teambition的筛选功能
Mar 01 Vue.js
详解Vue.js 可拖放文本框组件的使用
Mar 03 Vue.js
原生JS封装vue Tab切换效果
Apr 28 Vue.js
Vue实现下拉加载更多
May 09 Vue.js
Vue 打包后相对路径的引用问题
Jun 05 Vue.js
Vue3实现简易音乐播放器组件
Aug 14 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防盗链代码实例
2014/08/27 PHP
php生成酷炫的四个字符验证码
2016/04/22 PHP
php实现简易计算器
2020/08/28 PHP
JavaScript面向对象之体会[总结]
2008/11/13 Javascript
关于jquery的多个选择器的使用示例
2013/10/18 Javascript
推荐6款基于jQuery实现图片效果插件
2014/12/07 Javascript
PHP 数组current和next用法分享
2015/03/05 Javascript
javascript数据结构与算法之检索算法
2015/04/04 Javascript
JavaScript点击按钮后弹出透明浮动层的方法
2015/05/11 Javascript
对象题目的一个坑 理解Javascript对象
2015/12/22 Javascript
详解Html a标签中href和onclick用法、区别、优先级别
2017/01/16 Javascript
js实现音乐播放控制条
2017/09/09 Javascript
BootStrap 标题设置跨行无效的解决方法
2017/10/25 Javascript
JS运动特效之同时运动实现方法分析
2018/01/24 Javascript
javascript高仿热血传奇游戏实现代码
2018/02/22 Javascript
Vue动态获取width的方法
2018/08/22 Javascript
Vue 2.0 侦听器 watch属性代码详解
2019/06/19 Javascript
Node.js HTTP服务器中的文件、图片上传的方法
2019/09/23 Javascript
extjs4图表绘制之折线图实现方法分析
2020/03/06 Javascript
angular *Ngif else用法详解
2020/12/15 Javascript
在Python下使用Txt2Html实现网页过滤代理的教程
2015/04/11 Python
Django应用程序中如何发送电子邮件详解
2017/02/04 Python
基于python指定包的安装路径方法
2018/10/27 Python
Python3 venv搭建轻量级虚拟环境的步骤(图文)
2019/08/09 Python
python进程间通信Queue工作过程详解
2019/11/01 Python
Python散点图与折线图绘制过程解析
2019/11/30 Python
解决Keras中循环使用K.ctc_decode内存不释放的问题
2020/06/29 Python
HTML5 Convas APIs方法详解
2015/04/24 HTML / CSS
Notino瑞典:购买香水和美容产品
2019/07/26 全球购物
Servlet的实例是在生命周期什么时候创建的?配置servlet最重要的是什么?
2012/05/30 面试题
资源工程专业毕业生求职信
2014/02/27 职场文书
离职保密承诺书
2014/05/28 职场文书
奥运会口号
2014/06/13 职场文书
习近平在党的群众路线教育实践活动总结大会上的讲话全文
2014/10/25 职场文书
《生物入侵者》教学反思
2016/02/16 职场文书
mybatis-plus模糊查询指定字段
2022/04/28 Java/Android