当前位置: 首页 > article >正文

Vue3:具名插槽

目录

一.性质与作用

1.基本性质

2.使用方式

3.作用

4.应用场景

5.注意事项

二.使用

1.父组件

2.子组件

三.代码

1.父组件代码

2.子组件代码

四.效果


具名插槽在Vue3中用于为组件提供一种方式,允许父组件向子组件注入内容,并且可以指定这些内容应该被插入到子组件的哪个部分

一.性质与作用

1.基本性质

具名插槽允许开发者通过给插槽元素添加特殊的name属性来定义插槽的名称。这样,父组件就可以将内容精确地插入到指定的插槽位置。例如,一个名为"header"的插槽会专门用于接收头部的内容。

2.使用方式

在父组件中,可以通过v-slot指令或其缩写形式#来引用具名插槽,并在其中填充想要传递的内容。具名插槽的使用使得组件更加灵活,因为它允许父组件自定义子组件的某些部分,而不是完全接管子组件的渲染逻辑。

3.作用

具名插槽的主要作用是提高组件的复用性和可定制性。它使得子组件能够定义一些占位区域,由父组件决定这些区域具体显示什么内容。这种方式特别适合于需要在不同上下文中展示不同内容的情况,如导航栏、表单元素等。

4.应用场景

具名插槽适用于多种场景,尤其是在构建复杂界面时非常有用。例如,在一个通用的导航栏组件中,可以使用具名插槽来定义左侧、中间和右侧的不同内容区域,然后根据不同的页面需求插入不同的链接或按钮。

5.注意事项

在使用具名插槽时,需要注意确保每个插槽都有唯一的名称,避免与其他插槽混淆。同时,如果子组件中有多个具名插槽,父组件必须为每个插槽提供内容,否则可能会出现预期外的行为或渲染错误。

二.使用

1.父组件

v-slot在Vue3中的作用是提供一种统一的方式来处理具名插槽和作用域插槽,从而增强了组件的可复用性和灵活性。

v-slot提供了一种缩写形式,即使用井号(#)加上插槽名称。这种简写方式使得代码更加简洁易读。

2.子组件

三.代码

1.父组件代码

<template>
  <div class="grandfather">
    <Father >
      <template  v-slot:a>
        <h4>
          学生
        </h4>
      </template>
      <template  v-slot:b>
        <ol>
          <li v-for="s in student" :key="s.id">{{ s.name}}</li>
        </ol>
      </template>
    </Father>

    <Father >
      <template #a>
        <h4>
          老师
        </h4>
      </template>
      <template #b>
        <ol>
        <li v-for="t in teacher" :key="t.id">{{ t.name}}</li>
      </ol>
      </template>
    </Father>

    <Father>
      <template #a>
        <h4>
          电影
        </h4>
      </template>  
      <template #b>
        <video :src="videoUrl" controls></video>
      </template>
    </Father>
  </div>
 </template>
  
 <script setup lang="ts" name="Father">
  import Father from "./Father.vue";
  import { ref,reactive } from "vue";

  let student = reactive([
    {id:1,name:'小明',score:80},
    {id:2,name:'小红',score:100},
    {id:3,name:'小蓝',score:90},
    {id:4,name:'小菲',score:60}
  ])

  let teacher = reactive([
    {id:1,name:'张老师'},
    {id:2,name:'李老师'},
    {id:3,name:'王老师'}
  ])

  let videoUrl = ref('http://vfx.mtime.cn/Video/2021/07/10/mp4/210710095541348171.mp4')

 </script>


<style scoped>
.grandfather{
    background-color: skyblue;
}
h4{
    margin-left: 20px;
    font-size: 20px;
}

</style>

2.子组件代码

<template>
    <div class="father">
	    <h2>{{ title }}</h2>
        <!-- 默认插槽 -->
        <slot name="a">默认内容1</slot>
        <slot name="b">默认内容2</slot>
    </div>
</template>

<script setup lang="ts" name="father">


</script>


<style scoped>
.father{
    background-color: orange;
}
h4{
    margin-left: 20px;
    font-size: 20px;
}
button{
  margin-left: 20xp;
  width: 200px;
  height: 40px;
}

</style>

四.效果


http://www.kler.cn/a/317329.html

相关文章:

  • 【数据分享】全国农产品成本收益资料汇编(1953-2024)
  • H.265流媒体播放器EasyPlayer.js H.264/H.265播放器chrome无法访问更私有的地址是什么原因
  • Ubuntu24.04上安装和配置MariaDB
  • sql分区
  • QTcpSocket 服务端和客户端
  • 学习日志010--python异常处理机制与简单文件操作
  • 微信小程序07-开发进阶
  • c++难点核心笔记(一)
  • 基于SpringBoot+Vue的在线问诊管理系统
  • 【觅图网-注册安全分析报告-无验证方式导致安全隐患】
  • 爬虫逆向学习(七):补环境动态生成某数四代后缀MmEwMD
  • AIGC时代!AI的“iPhone时刻”与投资机遇
  • Electron 隐藏顶部菜单
  • 面试速通宝典——2
  • 在特征工程中,如何评估特征的重要性
  • linux使用docker安装运行kibana报错“Kibana server is not ready yet“的解决办法
  • Linux 网络安全守护:构建安全防线的最佳实践
  • 【开源免费】基于SpringBoot+Vue.JS学科竞赛管理系统(JAVA毕业设计)
  • 对onlyoffice进行定制化开发
  • 1614. 括号的最大嵌套深度
  • 单片机原理与应用
  • 深入理解音视频pts,dts,time_base以及时间数学公式
  • GNU链接器(LD):什么是符号?符号定义及实例解析
  • 网络分段:您需要了解的一切
  • ssh 免密登陆服务器故障
  • 免费在线压缩pdf 压缩pdf在线免费 推荐简单好用