一文详解Vue中插槽的具体使用

 更新时间:2023年06月14日 14:57:36   作者:加油乐  
Vue的插槽(Slot)是一种可以让父组件向子组件传递内容的机制,这篇文章主要通过一些简单的示例为大家介绍了插槽的具体使用,感兴趣的小伙伴可以了解一下

一、前言

插槽就像放在组件中的占位标签,使用组件时我们将要放到占位标签处的DOM结构写入组件标签体中即可。

通俗点来讲,插槽就是在自定义组件中预留一个位置,这个位置的内容可以由使用组件的人来定义,可以通过属性等数据实现动态的内容展示及交互,具有高度的灵活性,。

二、匿名插槽

义组件时,在需要由用户自定义的区域使用<slot></slot>占位,使用组件时,在组件的标签之间通过<template></template>定义要往插槽中填充的内容。示例代码:

定义组件

如果在定义组件时没有使用<slot></slot>占位,即使在使用组件时在组件标签之间定义了内容,也会被忽略。

//定义一个组件Box
<template>
    <div>
        <div>这是一个定义了插槽的组件</div>
        <slot></slot>
        <div>组件其它内容</div>
    </div>
</template>

使用组件

//使用上面的组件
<Box>
   <template>
       <div>插槽中展示的内容</div>
   </template>
</Box>

对应关系

三、后备内容

此处所说的后备内容是官方文档里面的叫法,实际上就是指插槽的默认值。在定义组件时,可以在<slot><slot>之间给出插槽的默认内容,也就是说当使用插槽时如果没有在组件标签内定义插槽的内容,则默认内容生效,否则默认内容不生效。例如:

定义组件插槽设置默认内容

//定义一个组件Box
<template>
    <div>
        <div>这是一个定义了插槽的组件</div>
        <!-- 通过slot定义了一个插槽,并在插槽中给出了默认值 -->
        <slot>
            <div>这是插槽的默认内容</div>
        </slot> 
        <div>组件其它内容</div>
    </div>
</template>

不使用默认值,覆盖

<Box>
    <template>
        <div>插槽中展示的内容</div>
    </template>
</Box>

此时页面呈现的内容为:

使用默认值

<Box></Box>

此时页面呈现的内容为:

四、具名插槽(命名插槽)

每个插槽都有一个名字,当一个组件中只有一个插槽时,我们可以不用指定插槽的名称,此时插槽的名称为:default。如果一个组件中有多个插槽,我们必须为每个插槽制定名称,否则无法向插槽填充对应的内容。

在组件定义时为solt制定name属性,使用组件时,通过v-slot:插槽名称,指定插入到哪个插槽。v-slot必须使用在template标签上,v-slot:插槽名称可以简写为#插槽名称,推荐使用简写。示例:

定义组件

<template>
    <div class="box">
        <span>我是组件的内容</span>
        <div class="slots">
            <!-- 定义名字为left的插槽 -->
            <div class="left">
                <slot name="left"></slot>
            </div>
            <!-- 定义名字为center的插槽 -->
            <div class="center">
                <slot name="center"></slot>
            </div>
            <!-- 定义名字为right的插槽 -->
            <div class="right">
                <slot name="right"></slot>
            </div>
        </div>
        <div>组件其他内容</div>
    </div>
</template>

使用组件

<Box>
      <!-- 使用v-slot:插槽名字 -->
      <template v-slot:left>
        我是left插槽的内容
      </template>
      <!-- 使用#插槽名字 -->
      <template #center>
        我是center插槽的内容
      </template>
      <template #right>
        我是right插槽的内容
      </template>
</Box>

效果展示

五、作用域插槽

定义组件Box

定义组件时为slot增加了name和data属性,name为slot的名称,data为自定义属性。

<template>
    <div class="box">
        <span>我是组件的内容</span>
        <div class="slotBox">
            <slot name="slotBox1" :data="list"></slot>
            <slot name="slotBox2" :data="list"></slot>
        </div>
        <div>组件其他内容</div>
    </div>
</template>
<script>
export default {
    name: "slotPiece",
    data() {
        return {
            list: [{
                txt: '内容1',
                id: 1
            }, {
                txt: '内容2',
                id: 2
            }, {
                txt: '内容3',
                id: 3
            }, {
                txt: '内容4',
                id: 4
            }]
        };
    },
}
</script>

使用组件

使用组件时template标签中指令:#slotBox1="data",其中#slotBox1是:v-slot:slotBox1的缩写,data中包含了data属性值,使用时可以通过data.data或{ data }解构数据获取传过来的消息内容,对其进行渲染或修改等操作。

<Box>
      <template #slotBox1="data">
        <!-- 接收过来不解构为下面的结构: -->
        <div>
          <div>我是不解构的数据</div>
          {{ data }}
        </div>
        <!-- 通过属性取值: -->
        <div>
          <div>通过属性取值</div>
          {{ data.data }}
        </div>
      </template>
      <!-- 通过{ }结构数据 -->
      <template #slotBox2="{ data }">
        <div>
          <div>我是解构后的数据</div>
          {{ data }}
          <div>使用或修改数据</div>
          <div v-for="hl in data">内容:{{ hl.txt }}</div>
        </div>
      </template>
</Box>

效果展示

以上就是一文详解Vue中插槽的具体使用的详细内容,更多关于Vue插槽的资料请关注脚本之家其它相关文章!

相关文章

  • JavaScript获取上传进度的几种方式实现

    JavaScript获取上传进度的几种方式实现

    进度条的应用是为了显示的告诉用户文件上传了多少,本文主要介绍了JavaScript获取上传进度的几种方式,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-08-08
  • Bootstrap每天必学之工具提示(Tooltip)插件

    Bootstrap每天必学之工具提示(Tooltip)插件

    Bootstrap每天必学之工具提示(Tooltip)插件,工具提示就是通过鼠标移动选定在特定的元素上时,显示相关的提示语,感兴趣的小伙伴们可以参考一下
    2016-04-04
  • ES6 Promise对象的含义和基本用法分析

    ES6 Promise对象的含义和基本用法分析

    这篇文章主要介绍了ES6 Promise对象的含义和基本用法,结合实例形式分析了Promise的含义、功能、基本用法及相关操作注意事项,需要的朋友可以参考下
    2019-06-06
  • js文本框输入点回车触发确定兼容IE、FF等

    js文本框输入点回车触发确定兼容IE、FF等

    js文本框输入点回车触发确定兼容IE、FF等,下面有个不错的示例,感兴趣的朋友可以参考下
    2013-11-11
  • 前端水印实现方案详细举例介绍

    前端水印实现方案详细举例介绍

    前端水印技术常用于防止信息泄露或追溯数据来源,尤其在后台管理系统、数据可视化平台中应用广泛,这篇文章主要介绍了前端水印实现方案的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2026-06-06
  • 如何实现从照片中裁切自已的肖像呢?

    如何实现从照片中裁切自已的肖像呢?

    如何实现从照片中裁切自已的肖像呢?...
    2007-03-03
  • 使用Electron自制录屏软件

    使用Electron自制录屏软件

    录屏软件对于我们来说都不陌生了,本文我们要做的事情是实现自己的录屏软件,载体使用Electron,因为它更适合录制桌面的场景,下面我们就来看看具体实现方法吧
    2024-01-01
  • js实现做通讯录的索引滑动显示效果和滑动显示锚点效果

    js实现做通讯录的索引滑动显示效果和滑动显示锚点效果

    下面小编就为大家带来一篇js实现做通讯录的索引滑动显示效果和滑动显示锚点效果。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • javascript trim 去空格函数实现代码

    javascript trim 去空格函数实现代码

    去除字符串左右两端的空格,在vbscript里面可以轻松地使用 trim、ltrim 或 rtrim,但在js中却没有这3个内置方法,需要手工编写。下面的实现方法是用到了正则表达式,效率不错,并把这三个方法加入String对象的内置方法中去。
    2008-10-10
  • JS实现旋转木马式图片轮播效果

    JS实现旋转木马式图片轮播效果

    这篇文章主要为大家详细介绍了JS实现旋转木马式图片轮播效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01

最新评论