Vue 2 探秘:visible 和 append-to-body 是谁的小秘密?

news2025/4/1 14:35:11

🚀 Vue 2 探秘:visibleappend-to-body 是谁的小秘密?🤔

  • 父组件:identify-list.vue
  • 子组件:fake-clue-list.vue

嘿,各位前端探险家!👋 今天我们要在 Vue 2 的代码丛林里挖宝,目标是两个神秘属性:visibleappend-to-body。它们藏在组件里,像遥控器一样控制对话框的开关和位置。到底是谁定义了它们?它们有啥用?咱们带上放大镜 🔍,一起揭秘吧!✨


🌟 背景:从一个对话框开始

假设你有一个 Vue 2 项目,用的是 Element UI 的 <el-dialog>。代码长这样:

<!-- 父组件 -->
<template>
  <el-dialog :visible="visible" title="识别点">
    <fake-clue-list :visible.sync="fclVis" @close="onfclClose" />
  </el-dialog>
</template>
<!-- fake-clue-list.vue 子组件 -->
<template>
  <el-dialog :visible="visible" :append-to-body="true" title="假货线索">
    <!-- 内容 -->
  </el-dialog>
</template>

点击按钮,子组件的对话框蹦出来,但你突然好奇:visibleappend-to-body 到底是谁定义的?是自己写的,还是框架给的?别急,咱们一步步解剖!🧑‍🔬


🎬 第一幕:visible 的身世之谜

它从哪来?

在父组件中,我们看到 <fake-clue-list :visible.sync="fclVis" />,子组件里是 <el-dialog :visible="visible">。这俩 visible 啥关系?

子组件的定义

打开 fake-clue-list.vue,发现:

export default class extends Vue {
  @Prop({ default: false }) private visible!: boolean
}
  • @Propvisible 是子组件用 TypeScript 的 @Prop 装饰器定义的一个 prop,默认值是 false
  • 作用:接收父组件传来的值(fclVis),然后绑定到 <el-dialog>:visible
Element UI 的影子

但等等!<el-dialog>visible 可不是随便起的名字。根据 Element UI 文档:

  • 属性visible
  • 类型Boolean
  • 作用:控制对话框显示与隐藏。

子组件的 visible prop 直接传给了 <el-dialog>,这说明:

  • 直接定义者:是你(或子组件作者),在 FakeClueList 中用 @Prop 声明。
  • 根本来源:Element UI 的 <el-dialog>,它定义了 visible 这个 prop,子组件只是“借用”并传递。

实验验证

为了确认,我试着注释掉 @Prop

// @Prop({ default: false }) private visible!: boolean

结果?控制台炸了:

[Vue warn]: Property or method "visible" is not defined on the instance but referenced during render.

对话框也不弹了!这证明:

  • visibleFakeClueList 自己声明的 prop。
  • 没有它,父组件的 :visible.sync 无处对接,<el-dialog> 也懵了。😵

流程图:visible 的旅程

用 Mermaid 图展示一下:

传递Prop
属性绑定
控制显示
用户操作
事件传递
状态同步
父组件状态: fclVis
FakeClueList组件
el-dialog组件
对话框显示
关闭对话框
更新状态: $emit

🎭 第二幕:append-to-body 的多余冒险

父组件的“热情”

父组件原本是这样的:

<fake-clue-list :visible.sync="fclVis" :append-to-body="true" @close="onfclClose" />

:append-to-body="true" 看起来像是要控制啥,但子组件里呢?

子组件的真相
<el-dialog :visible="visible" :append-to-body="true">
  • 硬编码:子组件直接写死了 :append-to-body="true"
  • Prop 检查:脚本中没有:
    @Prop() private appendToBody!: boolean
    
    也就是说,FakeClueList 根本没定义 append-to-body 作为 prop!
Element UI 的定义

再看 Element UI 文档:

  • 属性append-to-body
  • 类型Boolean
  • 默认值false
  • 作用:决定对话框 DOM 是否追加到 <body>

子组件的 :append-to-body="true" 是给 <el-dialog> 用的,但父组件的 :append-to-body 呢?因为没被子组件接收,它只是个“空气传值”,啥也没干。😂

删除实验

我把父组件的 :append-to-body 删了:

<fake-clue-list :visible.sync="fclVis" @close="onfclClose" />

结果?对话框照样弹出,DOM 依然挂在 <body> 下。为啥?因为子组件的 <el-dialog :append-to-body="true"> 已经全权负责!


🧠 思维导图总结

用 Mermaid 画个思维导图,理清关系:

Vue 2 属性探秘
visible
append-to-body
定义者: FakeClueList
@Prop 声明
来源: Element UI
的 visible
作用: 控制显示
定义者: Element UI
的 append-to-body
父组件传值: 无用
子组件: 写死 true
作用: DOM 追加到 body

🎉 结论与收获

  1. visible

    • 谁定义的:你在 FakeClueList 中用 @Prop 声明。
    • 来源:沿用 Element UI 的 <el-dialog>visible
    • 重要性:没它,对话框开关失灵!
  2. append-to-body

    • 谁定义的:Element UI,在 <el-dialog> 中提供。
    • 你的用法:子组件写死 true,父组件的传值多余。
    • 清理:删掉父组件的 :append-to-body,代码更清爽。

小Tips

  • 想动态控制 append-to-body?在子组件加个 @Prop,别写死。
  • 检查 prop 用没用到,省得像 :append-to-body 这样“白传”。

这次探秘是不是很有趣?😎 下次遇到神秘属性,别忘了带上实验精神,一探到底!有啥想法,评论区聊聊吧!👇

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2324850.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习的一百个概念(1)单位归一化

前言 本文隶属于专栏《机器学习的一百个概念》&#xff0c;该专栏为笔者原创&#xff0c;引用请注明来源&#xff0c;不足和错误之处请在评论区帮忙指出&#xff0c;谢谢&#xff01; 本专栏目录结构和参考文献请见[《机器学习的一百个概念》 ima 知识库 知识库广场搜索&…

SpringCould微服务架构之Docker(5)

Docker的基本操作&#xff1a; 镜像相关命令&#xff1a; 1.镜像名称一般分两部分组成&#xff1a;[repository]:[tag]。 2. 在没有指定tag时&#xff0c;默认是latest&#xff0c;代表着最新版本的镜像。 镜像命令的案例&#xff1a; 镜像操作常用的命令&#xff1a; dock…

SpringAI与JBoltAI深度对比:从工具集到企业级AI开发范式的跃迁

一、Java生态下大模型开发的困境与需求 技术公司的能力断层 多数企业缺乏将Java与大模型结合的标准开发范式&#xff0c;停留在碎片化工具使用阶段。 大模型应用需要全生命周期管理能力&#xff0c;而不仅仅是API调用。 工具集的局限性 SpringAI作为工具集的定位&#xff1…

Python中multiprocessing的使用详解

1.实现多进程 代码实现&#xff1a; from multiprocessing import Process import datetime import timedef task01(name):current_timedatetime.datetime.now()start_timecurrent_time.strftime(%Y-%m-%d %H:%M:%S). "{:03d}".format(current_time.microsecond //…

强化学习与神经网络结合(以 DQN 展开)

目录 基于 PyTorch 实现简单 DQN double DQN dueling DQN Noisy DQN&#xff1a;通过噪声层实现探索&#xff0c;替代 ε- 贪心策略 Rainbow_DQN如何计算连续型的Actions 强化学习中&#xff0c;智能体&#xff08;Agent&#xff09;通过与环境交互学习最优策略。当状态空间或动…

飞书电子表格自建应用

背景 coze官方的插件不支持更多的飞书电子表格操作&#xff0c;因为需要自建应用 飞书创建文件夹 创建应用 开发者后台 - 飞书开放平台 添加机器人 添加权限 创建群 添加刚刚创建的机器人到群里 文件夹邀请群 创建好后&#xff0c;就可以拿到id和key 参考教程&#xff1a; 创…

深度学习四大核心架构:神经网络(NN)、卷积神经网络(CNN)、循环神经网络(RNN)与Transformer全概述

目录 &#x1f4c2; 深度学习四大核心架构 &#x1f330; 知识点概述 &#x1f9e0; 核心区别对比表 ⚡ 生活化案例理解 &#x1f511; 选型指南 &#x1f4c2; 深度学习四大核心架构 第一篇&#xff1a; 神经网络基础&#xff08;NN&#xff09; &#x1f330; 知识点概述…

MCP Server 实现一个 天气查询

​ Step1. 环境配置 安装 uv curl -LsSf https://astral.sh/uv/install.sh | shQuestion: 什么是 uv 呢和 conda 比有什么区别&#xff1f; Answer: 一个用 Rust 编写的超快速 (100x) Python 包管理器和环境管理工具&#xff0c;由 Astral 开发。定位为 pip 和 venv 的替代品…

Headless Chrome 优化:减少内存占用与提速技巧

在当今数据驱动的时代&#xff0c;爬虫技术在各行各业扮演着重要角色。传统的爬虫方法往往因为界面渲染和资源消耗过高而无法满足大规模数据采集的需求。本文将深度剖析 Headless Chrome 的优化方案&#xff0c;重点探讨如何利用代理 IP、Cookie 和 User-Agent 设置实现内存占用…

知识就是力量——HELLO GAME WORD!

你好&#xff01;游戏世界&#xff01; 简介环境配置前期准备好文章介绍创建头像小功能组件安装本地中文字库HSV颜色空间音频生成空白的音频 游戏UI开发加载动画注册登录界面UI界面第一版第二版 第一个游戏&#xff08;贪吃蛇&#xff09;第二个游戏&#xff08;俄罗斯方块&…

电脑连不上手机热点会出现的小bug

一、问题展示 注意: 不要打开 隐藏热点 否则他就会在电脑上 找不到自己的热点 二、解决办法 把隐藏热点打开即可

JAVA反序列化深入学习(八):CommonsCollections6

与CC5相似&#xff1a; 在 CC5 中使用了 TiedMapEntry#toString 来触发 LazyMap#get在 CC6 中是通过 TiedMapEntry#hashCode 来触发 LazyMap#get 之前看到了 hashcode 方法也会调用 getValue() 方法然后调用到其中 map 的 get 方法触发 LazyMap&#xff0c;那重点就在于如何在反…

鸿蒙项目源码-外卖点餐-原创!原创!原创!

鸿蒙外卖点餐外卖平台项目源码含文档包运行成功ArkTS语言。 我半个月写的原创作品&#xff0c;请尊重原创。 原创作品&#xff0c;盗版必究&#xff01;&#xff01;&#xff01; 原创作品&#xff0c;盗版必究&#xff01;&#xff01;&#xff01; 原创作品&#xff0c;盗版…

React程序打包与部署

===================== 推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 为生产环境准备React应用最小化和打包环境变量错误处理部署到托管服务部署到Netlify探索高级主题:Hooks、Su…

Leetcode算法方法总结

1. 双指针法解决链表/数组题目 只要数组有序&#xff0c;就要想到双指针做法。还有二分法 回文串一般也会用到双指针&#xff0c;回文串的长度由于可能是奇数也可能是偶数&#xff0c;所以在寻找时&#xff0c;既需要寻找奇数长度的回文串&#xff0c;也需要寻找偶数长度的回文…

全包圆玛奇朵样板间亮相,极简咖啡风引领家装新潮流

在追求品质生活的当下&#xff0c;家居装修风格的选择成为了许多消费者关注的焦点。近日&#xff0c;全包圆家居装饰有限公司精心打造的玛奇朵样板间正式对外开放&#xff0c;以其独特的咖啡色系极简风格&#xff0c;为家装市场带来了一股清新的潮流。玛奇朵样板间不仅展示了全…

大数据学习(92)-spark详解

&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一…

免费下载 | 2025年网络安全报告

报告总结了2024年的网络安全态势&#xff0c;并对2025年的安全趋势进行了预测和分析。报告涵盖了勒索软件、信息窃取软件、云安全、物联网设备安全等多个领域的安全事件和趋势&#xff0c;并提供了安全建议和最佳实践。 一、报告背景与目的 主题&#xff1a;2024企业信息安全峰…

RCE--解法

目录 一、利用php伪协议 1.代码分析 2.过程 3.结果 ​编辑 4.防御手段 二、RCE(php中点的构造&#xff09; 1.代码分析 2.过程 一、利用php伪协议 <?php error_reporting(0); if(isset($_GET[c])){$c $_GET[c];if(!preg_match("/flag|system|php|cat|sort…