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

【Vue3 for beginner】普通插槽、具名插槽、作用域插槽

挪威特罗姆瑟夜景

🌈Don’t worry , just coding!
内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。

📗插槽

在 Vue 3 中,插槽(Slots)是一个强大的功能,可以帮助我们在组件中定义可重用的内容。插槽分为普通插槽、具名插槽和作用域插槽。

💻代码

普通插槽

普通插槽允许你在父组件中插入内容到子组件的指定位置,是没有name属性的。
App.vue

<template>
  <div>
    <h1>我是父组件的H1标题</h1>
    <Child>
      <p>这段代码是在父组件写的,这是插入到子组件的内容。</p>
    </Child>
    <Child></Child>
  </div>
</template>

<script>
import Child from './Child.vue';

export default {
  components: { Child },
  name: 'Parent'
}
</script>

Chile.vue

<template>
    <div>
      <h2>这是子组件H2标题</h2>
      <slot></slot> <!-- 普通插槽 -->
    </div>
  </template>
  
  <script>
  export default {
    name: 'Child'
  }
  </script>

效果:
在这里插入图片描述

具名插槽

具名插槽允许你在子组件中定义多个插槽,并通过名称来区分它们。
App.vue

<template>
  <div>
    <h1>父组件</h1>
    <Child>
      <template v-slot:header>
      </template>
      
      <p>这是插入到子组件的主要内容,当父组件没有默认内容时才会展示子组件内容</p>
      
      <template v-slot:footer>
        <p>这是底部默认内容</p>
      </template>
    </Child>
  </div>
</template>

<script>
import Child from './Child.vue';

export default {
  components: { Child },
  name: 'Parent'
}
</script>

Child.vue

<template>
  <div>
    <h2>子组件</h2>
    <slot name="header">
      <ul>
        <li>header内容</li>
        <li>header内容</li>
        <li>header内容</li>
      </ul>
    </slot> <!-- 具名插槽 -->
    <slot></slot> <!-- 默认插槽 -->
    <slot name="footer">
      <ul>
        <li>footer内容</li>
        <li>footer内容</li>
        <li>footer内容</li>
      </ul>
    </slot> <!-- 具名插槽 -->
  </div>
</template>

<script>
export default {
  name: 'Child'
}
</script>

  • 父组件引用子组件,父组件没有默认内容时会展示子组件显示的内容

作用域插槽

作用域插槽允许父组件访问子组件中的数据。这种插槽可以将数据传递给父组件,使父组件能够使用这些数据。
App.vue

<template>
  <div>
    <h1>父组件</h1>
    <Child>
      <template v-slot:student-slot="{ student }">
        <div class="student-info">
          <h3>学生信息:</h3>
          <p class="student-name">姓名: {{ student.name }}</p>
          <p class="student-age">年龄: {{ student.age }}</p>
          <p class="student-grade">年级: {{ student.grade }}</p>
        </div>
      </template>
    </Child>
  </div>
</template>

<script>
import Child from './Child.vue';

export default {
  components: { Child },
  name: 'Parent'
}
</script>

<style scoped>
h1 {
  color: #333; /* 主标题颜色 */
}

.student-info {
  border: 1px solid #4CAF50; /* 边框颜色 */
  padding: 10px;
  border-radius: 5px;
  background-color: #f9f9f9; /* 背景颜色 */
  margin-top: 10px;
}

.student-name {
  font-weight: bold; /* 姓名加粗 */
  color: #2196F3; /* 姓名颜色 */
}

.student-age,
.student-grade {
  color: #555; /* 年龄和年级颜色 */
}
</style>

Child.vue

<template>
  <div>
    <h2>子组件</h2>
    <slot name="student-slot" :student="student">
      <p>没有学生信息可显示。</p>
    </slot>
  </div>
</template>

<script>
import { ref } from 'vue';

export default {
  name: 'Child',
  setup() {
    // 定义一个学生对象
    const student = ref({
      name: '张三',
      age: 20,
      grade: '大二'
    });

    return {
      student
    };
  }
}
</script>

解释:

 <template v-slot:student-slot="{ student }">引用插槽时,冒号后面是插槽的name

student-slot可以简写为#student-slot,在UI库中常见这样的简写,例如element-plus可以看到大量的#default。

🔍理解

该怎么理解父子组件的关系?

  • 父子组件的关系就像孩子的压岁钱,孩子的压岁钱可能有很多想法,当父亲同意时孩子才能去实现。如果父亲说压岁钱只能买书,那小孩想要买玩具就不会被实现。
  • 记忆:子组件中插槽的name就是小孩的名字,一个父亲可能有很多小孩,要给每个孩子指定行为用他们用name来指定;

💪无人扶我青云志,我自踏雪至山巅。
在这里插入图片描述


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

相关文章:

  • 《第十部分》1.STM32之通信接口《精讲》之IIC通信---介绍
  • HBU算法设计与分析 贪心算法
  • 深入解析 EasyExcel 组件原理与应用
  • opencv-python 分离边缘粘连的物体(距离变换)
  • 二叉树:堆的建立和应用
  • 基于深度学习CNN算法的花卉分类识别系统01--带数据集-pyqt5UI界面-全套源码
  • TM1可视化解决方案:企业增效降本的智控大脑
  • Linux 从 apt / yum 更新、升级中排除 / 保留 / 阻止特定软件包
  • 算法日记 33 day 动态规划(打家劫舍,股票买卖)
  • LeetCode—704. 二分查找(简单)
  • 用el-scrollbar实现滚动条,拖动滚动条可以滚动,但是通过鼠标滑轮却无效
  • Python绘制太极八卦
  • 无人机+无人车+机器狗+自组网:城市一空地体化指挥系统技术详解
  • element-ui 中el-calendar 日历插件获取显示的第一天和最后一天【原创】
  • 摄像机常见的问题及解决方法
  • HTML5 视频 Vedio 标签详解
  • 实现 UniApp 右上角按钮“扫一扫”功能实战教学
  • Java面试之多线程并发篇
  • django authentication 登录注册
  • Stable Diffusion入门教程
  • 从多个角度探索TOX革新Web3时代价值创造与重新分配
  • MySQL与Informix数据库中的同义表创建:深入解析与比较
  • Web3 游戏周报(11.17 - 11.23)
  • 远程控制软件:探究云计算和人工智能的融合
  • JavaWeb——Mybatis
  • 什么是回退机制