vue · 插槽 | $slots:访问所有命名插槽内容 | 插槽的使用:子组件和父组件如何书写?

子组件, 插槽的内容是由父组件传递进来的。

子组件定义插槽 ------ 子组件确定要 插入的位置**------** 定位

父组件定义插槽里的内容 ------ 父组件确定 内容**------****<template #prefix> 内容**


$slots ------ 访问插槽内容的对象

子组件中访问 $slots,就能知道父组件是否有传入插槽

  • $slots 是 Vue 实例中的一个属性,用于访问所有命名插槽内容。

  • 它是一个对象,键是插槽的名字 ,值是对应的 VNode 数组(Vue 虚拟 DOM 节点)。

与 $slots 类似的还有:
对象 作用说明
$slots 原始插槽内容,是未处理的 VNode。
$scopedSlots (Vue 2) 用于访问作用域插槽(函数)。 Vue 3 中++已废弃++。
slots (Vue 3 中 Composition API) 用于组合式 API 中访问插槽内容。

vue3中

javascript 复制代码
setup(props, { slots }) {
  if (slots.header) {
    const headerVNode = slots.header()
  }
}

注意:

  • $slots 中的 内容 是 VNode 对象数组,不是 HTML 字符串。

  • 不要直接修改 $slots,它是 只读的。

  • 若插槽为空 ,对应的键 会是 undefined。


如何判断是子组件还是父组件?

子组件
  • 定义了 插槽。
  • 插槽用于让父组件传入内容,所以 子组件接收内容,属于被插槽注入者 => 子组件。
  • 它也使用了 defineProps 和 defineEmits,表明它是一个组件模块,接收 props 和发出事件。
父组件
  • 父组件使用 **<template #prefix>**提供了 名为 prefix 的插槽内容。

  • 在 子组件件内部,插槽 的位置会渲染父组件提供的 内容 。

  • <template #xxx>...</template>,定义插槽中的具体内容

例

javascript 复制代码
<!-- 子组件 -->
<slot name="prefix" />
javascript 复制代码
<!-- 父组件中 -->
<VkInput v-model="text">
  <template #prefix>
    <Icon icon="search" />
  </template>
  <template #suffix>
    <span style="color: gray">后缀</span>
  </template>
</VkInput>

例子:

子组件,<slot name="xxx" />,只是占位符,内容由父组件传入

父组件,<template #xxx></template>,定义插槽中的具体内容

问题 答案
插槽的内容是由子组件传过来的吗? 不是,插槽的内容是由父组件传入的。子组件只是定义了插槽的位置 ,父组件传入内容。
相关推荐
用户11977079480736 分钟前
GitHub 电商开源项目分享:用 sharp 批量出饰品主图,试了裁剪、细节图和色彩配置文件三个坑
前端·node.js
deli00711 分钟前
地图定位为什么偏了 500 米?GPS 与火星坐标实测
前端
IT枫斗者枫哥11 分钟前
CompletableFuture失败后返回空列表:异常没了,业务含义也变了
java·后端
TK泰妞13 分钟前
节日促销前,TikTok 商品视频应该提前准备什么?
前端·人工智能·节日
知识搬运临时工22 分钟前
一个模板把 AEM 拖进 Full GC 死亡螺旋:300% CPU、7 GB 堆、310 万行堆栈
java·aws
CCIE-Yasuo24 分钟前
网络安全-学习web开发-列表、标签
前端·学习·web安全
用户4329359280526 分钟前
CoAP还是MQTT:1万只Cat.1水表三个月带宽续航实测
java
小大宇28 分钟前
Vue知识点-ElementPlus-06 单选+多选+下拉+日期选择
前端·vue.js·elementui
用户114818678948431 分钟前
Nuxt 3 学习版 Demo:跟着做一遍,从跑起来到自己会改
前端
知守观36 分钟前
多模块架构演进:横向分层 vs 纵向领域,13 个真实项目的切分对照
java·后端·微服务