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

🚀 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.pswp.cn/web/73391.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/73391.shtml
英文地址,請注明出處:http://en.pswp.cn/web/73391.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++學習之路:從頭搞懂配置VScode開發環境的邏輯與步驟

目錄 編輯器與IDE基于vscode的C開發環境配置1. 下載vscode、淺嘗編譯。番外篇 2. 安裝插件&#xff0c;賦能編程。3. 各種json文件的作用。c_cpp_properties.jsontask.jsonlaunch.json 總結&&彩蛋 編輯器與IDE 上一篇博客已經介紹過了C程序的一個編譯流程&#xff0c;從…

PPT 轉高精度圖片 API 接口

PPT 轉高精度圖片 API 接口 文件處理 / 圖片處理&#xff0c;將 PPT 文件轉換為圖片序列。 1. 產品功能 支持將 PPT 文件轉換為高質量圖片序列&#xff1b;支持 .ppt 和 .pptx 格式&#xff1b;保持原始 PPT 的布局和樣式&#xff1b;轉換后的圖片支持永久訪問&#xff1b;全…

VSCode 抽風之 兩個conda環境同時在被激活

出現了神奇的(toolsZCH)(base) 提示符&#xff0c;如下圖所示&#xff1a; 原因大概是&#xff1a;conda 環境的雙重激活&#xff1a;可能是 conda 環境沒有被正確清理或初始化&#xff0c;導致 base 和 toolsZCH 同時被激活。 解決辦法就是 &#xff1a;conda deactivate 兩次…

git | 回退版本 并保存當前修改到stash,在進行整合。[git checkout | git stash 等方法 ]

目錄 一些常見命令&#xff1a; git 回退版本 一、臨時回退&#xff08;不會修改歷史&#xff0c;可隨時回到當前版本&#xff09; 方法1&#xff1a;git checkout HEAD~1 問題&#xff1a;處于 detached HEAD 狀態下提交的&#xff0c;無法直接 git push ? 選項 1&…

如何使用 Postman 進行接口測試?

使用 Postman 這一工具&#xff0c;可以輕松地進行接口測試。以下是一份簡單的使用教程&#xff0c;幫助你快速上手。 Postman 接口測試教程&#xff1a;詳細步驟及操作技巧

寫作軟件新體驗:讓文字創作更高效

一、開篇引入:寫作難題的破解之道 在當今信息爆炸的時代,寫作成為了我們生活和工作中不可或缺的一部分。然而,面對繁瑣的寫作任務,我們時常感到力不從心,甚至陷入創作的瓶頸。那么,有沒有一款軟件能夠幫助我們破解這一難題,讓文字創作變得更加高效和輕松呢?答案是肯定…

大模型思維鏈COT:Chain-of-Thought Prompting Elicits Reasoningin Large Language Models

一、TL&#xff1b;DR 探索了COT&#xff08;chain-of-thought prompting&#xff09;通過一系列的中間推理步驟來顯著的提升了LLM的復雜推理能力在三個大型語言模型上的實驗表明&#xff0c;思維鏈提示能夠提升模型在一系列算術、常識和符號推理任務上的表現解釋了一下為什么…

systemd-networkd的配置文件的優先級 筆記250325

systemd-networkd的配置文件的優先級 systemd-networkd的配置文件優先級規則如下&#xff1a; 1. 目錄優先級 配置文件按以下目錄順序加載&#xff08;優先級從高到低&#xff09;&#xff1a; /etc/systemd/network&#xff08;用戶自定義配置&#xff0c;最高優先級&#x…

詳細說明windows系統函數::SetUnhandledExceptionFilter(ExceptionFilter)

::SetUnhandledExceptionFilter(ExceptionFilter); 是 Windows 編程中用于設置頂層未處理異常過濾器的關鍵 API 調用。它屬于 Windows 結構化異常處理&#xff08;SEH, Structured Exception Handling&#xff09;機制的一部分&#xff0c;主要用于捕獲那些未被程序內部處理的異…

決策樹算法詳解:從西瓜分類到實戰應用

目錄 0. 引言 1. 決策樹是什么&#xff1f; 1.1 生活中的決策樹 1.2 專業版決策樹 2. 如何構建決策樹&#xff1f; 2.1 關鍵問題&#xff1a;選哪個特征先判斷&#xff1f; 2.1.1 信息熵&#xff08;數據混亂度&#xff09; 2.1.2 信息增益&#xff08;劃分后的整潔度提…

超融合服務器是什么

超融合服務器的定義與背景 超融合服務器&#xff08;Hyperconverged Infrastructure, HCI&#xff09;是一種通過軟件定義技術&#xff0c;將計算、存儲、網絡和虛擬化功能整合到單一硬件平臺中的IT基礎設施解決方案。其核心目標是通過資源的高度集成和統一管理&#xff0c;簡…

【網絡層協議】NAT技術內網穿透

IP地址數量限制 我們知道&#xff0c;IP地址&#xff08;IPv4&#xff09;是一個4字節32位的整數&#xff0c;那么一共只有2^32也就是接近43億個IP地址&#xff0c;而TCP/IP協議棧規定&#xff0c;每臺主機只能有一個IP地址&#xff0c;這就意味著&#xff0c;一共只有不到43億…

時隔多年,終于給它換了皮膚,并正式起了名字

時隔多年&#xff0c;終于更新了直播推流軟件UI&#xff0c;并正式命名為FlashEncoder。軟件仍使用MFC框架&#xff0c;重繪了所有用到的控件&#xff0c;可以有效保證軟件性能&#xff0c;也便于后續進一步優化。 下載地址&#xff1a;https://download.csdn.net/download/Xi…

代碼隨想錄第六十二天| Floyd 算法精講 A * 算法精講 (A star算法) 最短路算法總結篇

Floyd 算法精講 題目描述 小明希望在公園散步時找到從一個景點到另一個景點的最短路徑。給定公園的景點圖&#xff0c;包含 N 個景點和 M 條雙向道路&#xff0c;每條道路有已知的長度。小明有 Q 個觀景計劃&#xff0c;每個計劃包含一個起點和終點&#xff0c;求每個計劃的最…

如何避免測試環境不穩定導致的誤報

避免測試環境不穩定導致誤報的核心方法包括搭建獨立穩定的測試環境、使用環境監控工具、建立環境變更管理機制、定期維護更新測試環境以及提升團隊的環境管理意識。 其中&#xff0c;搭建獨立穩定的測試環境尤為關鍵。獨立的測試環境能有效隔離其他環境的干擾&#xff0c;保證測…

初級:I/O與NIO面試題深度剖析

一、引言 在Java開發中&#xff0c;I/O&#xff08;輸入/輸出&#xff09;操作是程序與外部設備&#xff08;如磁盤、網絡等&#xff09;進行數據交互的重要方式。傳統的I/O模型在處理大規模數據和高并發場景時存在一定的局限性&#xff0c;而NIO&#xff08;New I/O&#xff…

Axure RP9教程 :輪播圖(動態面板) | 頭部鎖定

文章目錄 引言I 輪播圖操作步驟在畫布中添加一個動態面板設置面板狀態II 頭部鎖定將頭部區域選中,右鍵組合或用Ctrl+G快捷鍵;將組合的頭部區域,右鍵創建動態面板;引言 動態面板的功能十分強大,比如:擁有獨立的內部坐標系,有多個狀態; Banner的案例中會用到動態面板多個…

超微服務器主板重置ipmi登錄密碼

超微服務器主板重置ipmi登錄密碼 超微服務器的ipmi登錄密碼不對&#xff0c;需要重置但是bios內并沒有找到可以設置的選項。 以下是解決辦法&#xff1a; 安裝IPMITOOL apt install ipmitool -y執行以下命令加載模塊&#xff1a; modprobe ipmi_watchdog modprobe ipmi_po…

藍橋杯第十屆 數的分解

題目描述 本題為填空題&#xff0c;只需要算出結果后&#xff0c;在代碼中使用輸出語句將所填結果輸出即可。 把 2019 分解成 3 個各不相同的正整數之和&#xff0c;并且要求每個正整數都不包含數字 2 和 4&#xff0c;一共有多少種不同的分解方法&#xff1f; 注意交換 3 個…

Docker入門篇4:查看容器資源、查看容器詳細信息、查看容器日志、查看容器內運行的進程

大家好我是木木&#xff0c;在當今快速發展的云計算與云原生時代&#xff0c;容器化技術蓬勃興起&#xff0c;Docker 作為實現容器化的主流工具之一&#xff0c;為開發者和運維人員帶來了極大的便捷 。下面我們一起開始入門第四篇&#xff1a;查看容器資源、查看容器詳細信息、…