透传属性$attrs

透传属性$attrs

前言

  • 我们首先在父组件上面定义一些数据
vue 复制代码
<template>
  <div class="box">
    <h3>父组件</h3>
    <h4>姓名1:{{ name1 }}</h4>
    <h4>姓名2:{{ name2 }}</h4>
    <h4>姓名3:{{ name3 }}</h4>
    <h4>姓名4:{{ name4 }}</h4>
    <Child />
  </div>
</template>

<script setup lang="ts">
import Child from './Child.vue'
import { ref } from 'vue';
let name1 = ref('张三');
let name2 = ref('王五');
let name3 = ref('李四');
let name4 = ref('赵六');
</script>
  • 那我现在想把父组件的一个name传给子组件怎么做呢?用props最简单
vue 复制代码
    <Child :name1="name1" />
  • 子组件只要接受一下就行了
vue 复制代码
<template>
  <div class="box">
    <h3>子组件</h3>
    <h4>{{ name1 }}</h4>
    <GrandChild />
  </div>
</template>

<script setup lang="ts">
import GrandChild from './GrandChild.vue';
defineProps(['name1'])

</script>
  • 那我可不可以将四个name都传过去呢,答案是可以的
vue 复制代码
    <Child :name1="name1" :name2="name2" :name3="name3" :name4="name4" />
  • 那如果我子组件只接受一个,其他三个跑哪里去了呢?因为归根揭底我父组件确实传给你了,我们使用vue扩展找找看在哪里

**

**

  • 我们发现在子组件中声明过props的就会在props立马,没有声明的都会在attrs,那是不是我们直接使用这个也会将变量读出来,我们来试试
vue 复制代码
<template>
  <div class="box">
    <h3>子组件</h3>
    <h4>{{ name1 }}</h4>
    <h4>{{ $attrs }}</h4>
    <GrandChild />
  </div>
</template>

那如何传给孙组件呢?

  • 先来介绍一下概念

"透传"指的是将父组件传递的、但未被子组件声明为 props 的属性,直接传给子组件内部的某个元素。

  • 想传给孙组件,子组件什么都不需要做?只需要把$attrs通过props给孙组件就可以了
vue 复制代码
<template>
  <div class="box">
    <h3>子组件</h3>
    <GrandChild v-bind="$attrs" />
  </div>
</template>

<script setup lang="ts">
import GrandChild from './GrandChild.vue';
</script>
  • 然后孙组件只需要接受就可以了
vue 复制代码
<template>
  <div class="box">
    <h3>孙组件</h3>
    <h4>姓名1:{{ name1 }}</h4>
    <h4>姓名2:{{ name2 }}</h4>
    <h4>姓名3:{{ name3 }}</h4>
    <h4>姓名4:{{ name4 }}</h4>
  </div>
</template>

<script setup lang="ts">
defineProps(['name1', 'name2', 'name3', 'name4'])
</script>
相关推荐
程序员大阳2 小时前
副队长JavaScript教程(49)-主动抛出异常与错误类型
javascript·异常处理·error·throw·错误类型
hhhjhl2 小时前
Protobuf.js 跨端三方库仓颉适配全流程
javascript·网络·udp
康小汪2 小时前
AI 写 Vue 总写成同一个味道:给它装 Skills,装的不是知识是边界
前端·vue.js·人工智能·ai编程·最佳实践
智能运维指南3 小时前
研制过程“两张皮“怎么破:研制一体化支撑平台的定位、能力边界与落地前提
java·前端·人工智能·嘉为蓝鲸
白山编程大哥4 小时前
Java 后端如何优雅地把 List 集合返回给前端
java·前端·list
Flynt5 小时前
我把热榜那篇"禁用 axios"逐条实测了一遍:结论大体对,坑在它没讲的地方
前端·javascript·axios
Csvn6 小时前
bundle优化
前端
slongzhang_6 小时前
linux 递归删除源码文件|递归删除目录下 *.js,但排除 *.min.js
linux·开发语言·javascript
北冥有鱼6 小时前
发版后动态路由点击报 `Failed to fetch dynamically imported module`」问题上的完整排查与修复过程
前端·vue.js
静默回滚6 小时前
视频压到 25 MB 以内,码率要算、音轨要扣、余量要留
前端