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

Vue3中v-bind=“$attrs“应用实例

应用情景:点击【设置列宽】,表格显示边框,再点击,隐藏边框,依此循环

实现应用效果的情况分析:

父组件传递 border

// 父组件
<script setup lang="ts" name="Reagent">
</script><template><ReagentTable :border="isBorder" />
</template>

情况1: 

子组件 defineProps border

孙组件 :border="props.border"

// 子组件
<script setup lang="ts" name="ReagentTable">
const props = defineProps<{border: boolean;
}>();
</script"><template>// 孙组件<el-table :border="props.border" ... />
</template>

情况2: 

子组件 defineProps border

孙组件 v-bind="$attrs" :border="props.border"

// 子组件
<script setup lang="ts" name="ReagentTable">
const props = defineProps<{border: boolean;
}>();
</script"><template>// 孙组件<el-table v-bind="$attrs" :border="props.border" ... />
</template>

情况3:

子组件没有 defineProps border

孙组件 v-bind="$attrs" :border="$attrs.border"

// 子组件
<script setup lang="ts" name="ReagentTable">
</script"><template>// 孙组件<el-table v-bind="$attrs" :border="$attrs.border" ... />
</template>

情况4: 

子组件没有 defineProps border

孙组件 v-bind="$attrs"

// 子组件
<script setup lang="ts" name="ReagentTable">
</script"><template>// 孙组件<el-table v-bind="$attrs" ... />
</template>

情况5: 

子组件没有 defineProps border

孙组件 :border="$attrs.border"

// 子组件
<script setup lang="ts" name="ReagentTable">
</script"><template>// 孙组件<el-table :border="$attrs.border" ... />
</template>

总结:

父组件情况子组件孙组件 el-table 有 border 说明
传递 border1

defineProps 

border

:border="props.border"
2

 v-bind="$attrs"

:border="props.border"

$attrs 中不包含 border
3/

v-bind="$attrs" 

:border="$attrs.border"

$attrs 中包含 border

在 $attrs 中指定 border

4 v-bind="$attrs"$attrs 中包含 border,多层透传
5

:border="$attrs.border"

在 $attrs 中指定 border

获取 $attrs 的内容

import { useAttrs } from "vue"; const attrs = useAttrs();
console.log("$attrs = ", attrs);

 输出打印

:border="$attrs.border"与直接使用 v-bind="$attrs" 的区别

方法示例优点缺点
单个属性透传:border="$attrs.border"精确控制单个属性需要为每个属性单独处理
批量透传v-bind="$attrs"自动传递所有属性可能传递不需要的属性

推荐组合使用

<el-table:border="$attrs.border" <!-- 明确处理的属性 -->v-bind="filteredAttrs" <!-- 传递其他属性 -->
>
http://www.dtcms.com/a/249845.html

相关文章:

  • 【学习笔记】Langchain基础(二)
  • 日志分割问题
  • 从大数据到大模型:我们是否在重蹈覆覆辙
  • 数据库连接池深度研究分析报告
  • 学习昇腾开发的第二天--PC机远程登录开发板
  • 2.4 机器人运动控制
  • leetcode_503 下一个更大元素
  • 从汇编的角度揭开C++ this指针的神秘面纱(上)
  • AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年6月14日第108弹
  • Java线程安全计数器实现方案
  • tcp, udp , 与 select .
  • pycharm2020.2版本给项目选择了虚拟环境解释器,项目文件都运行正常,为什么terminal文件路径的前面没有虚拟解释器的名称
  • http的缓存问题
  • 0到1案例演示 vue + axios 请求 springboot 的 restful 风格接口(前后端分离+跨域问题)
  • Zookeeper 3.8.4 安装部署帮助手册
  • CTF题目:Apache Flink目录遍历漏洞实战及CVE-2020-17519漏洞分析
  • HTML+CSS 实现注册登录切换效果
  • PC 基准测试工具 3D Mark 登陆 macOS
  • 14.vue.js的watch()的注意事项(1)
  • 使用 Azure LLM Functions 与 Elasticsearch 构建更智能的查询体验
  • Go语言底层(四): 深入浅出Go语言的ants协程池
  • 痉挛性斜颈:认识颈部的 “异常挛动”
  • 基于深度学习的智能图像分类系统:从零开始构建
  • 深度学习中的激活函数:PyTorch中的ReLU及其应用
  • 【Linux】初见,进程概念
  • React 性能优化实战指南:从理论到实践的完整攻略
  • 【项目实训#07】HarmonyOS API知识图谱构建与系统知识图谱后端实现
  • 固件签名技术深度解析:HSM模块如何守护设备安全,CAS系统如何赋能产业升级
  • Linux 线程深度解析:从内存管理到线程控制的核心机制
  • 替换一个数字后的最大差值