当前位置: 首页 > 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.xdnf.cn/news/1033939.html

相关文章:

  • 最小费用最大流算法
  • 架构下的最终瓶颈:数据库如何破局?
  • ARDM:一款国产跨平台的Redis管理工具
  • React项目常用目录结构
  • 细节致胜:如何重塑反向海淘用户体验
  • MongoDB 事务有哪些限制和注意事项?
  • 系统学习·PHP语言
  • sqli-labs靶场46-53关(综合)
  • c 语言如何将 uint8_t *tg_pFrames的数据给 uint8_t **ppJpg
  • YOLO11中的C3K2模块
  • AORSA关键文件及参数解释
  • Go语言---闭包
  • golang字符串拼接
  • 【MFC 突然被问到,怎么实现一个星星按钮】原来问的是继承xs
  • CTF题目:Apache Flink目录遍历漏洞实战及CVE-2020-17519漏洞分析
  • 标准库转hal库
  • Kafka - 并发消费拉取数据过少故障分析
  • PyTorch张量操作中dim参数的核心原理与应用技巧:
  • 【机械视觉】Halcon—【十三、实例找各个区域面积和中心点】
  • 大模型成长过程-预训练tokenizer
  • 2.5 Rviz使用教程
  • 人工智能学习13-Numpy-规律数组生成
  • pytorch基本运算-梯度运算:requires_grad_(True)和backward()
  • 多个项目的信息流如何统一与整合
  • Spring AI Chat Tool Calling 指南
  • MySQL使用EXPLAIN命令查看SQL的执行计划
  • 13.20 LangChain多链协同架构实战:LanguageMentor实现67%对话连贯性提升
  • [每周一更]-(第144期):Go 定时任务的使用:从基础到进阶
  • mysql 创建大写字母的表名失败
  • HarmonyOS 组件复用 指南