当前位置: 首页 > 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" <!-- 传递其他属性 -->
>

相关文章:

  • 【学习笔记】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 构建更智能的查询体验
  • 上海制作企业网站/爱站网官网查询域名
  • 什么网站简单/百度文库账号登录入口
  • 最牛视频网站建设/合肥优化排名推广
  • 像网站的ppt怎么做/地推团队联系方式
  • 视频网站外链怎么做/合肥网站优化
  • wordpress选择虚拟云主机/武汉网络优化知名乐云seo