目錄
詳說
Vue3.2
defineExpose
首頁 web前端 Vue.js 淺析Ref操作Dom在Vue2.x和Vue3.x的不同

淺析Ref操作Dom在Vue2.x和Vue3.x的不同

Jan 27, 2023 am 05:30 AM
前端 vue.js

Ref操作Dom為何既易用又有效率?以下這篇文章帶大家聊聊Ref操作,介紹一下Ref取得Dom的本質、其在Vue2.x和Vue3.x的不同等,希望對大家有所幫助!

淺析Ref操作Dom在Vue2.x和Vue3.x的不同

在開發一個專案之前,我們往往都是先做下需求分析,針對前端而言,就是可以研究或選擇一個基礎元件庫,來提升我們的工作效率。畢竟,對於比較計較時間成本的公司來說,不會給你拿看電視劇玩遊戲的時間去專門開發一個類似日曆的組件。但在市面上的元件庫,並不能都能滿足我們的需求。這時候,我們需要自己手寫元件,來應用在專案中。

而這就是我想說的: 如何設計元件,讓其既能易於應用(或者說減少程式碼量),又能提高擴展性,方便需求變更和後續維護?

可以有很多種方式,而利用Ref操作Dom的特性隨是其中之一,但這個方式卻讓我們在維護和操作Modal、Popup以及頻繁操作Dom顯示和隱藏互動的組件的時候,卻發揮得很大優勢。 【相關推薦:vuejs影片教學web前端開發

#就對Ref操作Dom的相關知識點以及應用實例分幾個面向來做下剖析

  • Ref取得Dom的本質
  • Ref操作Dom在Vue2.x和Vue3.x的不同
  • Ref操作元件Dom和父子元件單向傳遞對比

詳說

Ref取得Dom的本質

Vue2.x中Vue的對象屬性$refs,其實就是所有註冊過的ref的一個集合,而ref對應著template模版中,不同組件或普通Dom元素上關聯的ref="xx"; 源碼中ref的實際獲取方式也是通過原生方式getElementById而得到的Dom節點;可以說ref是document.getElementById的語法糖。 vue3的ref延續了vue2的用法,也增加了一個作用就是創建響應式資料

也許有人會問了,既然ref和getElementById都能取得到Dom,那麼在項目開發中,我選擇哪一種方式都沒什麼差別呢?

關於這個問題,經過數據表明,$refs相對document.getElementById的方法,會減少獲取dom節點的消耗;而具體原因,等下一篇文章再詳細探討。

Ref運算Dom在Vue2.x和Vue3.x的不同

##Vue2.x

#我們只需要在對應的Dom元素或元件加上ref="xx"屬性,然後在Vue物件中使用this.$refs.xx,就可以直接取得到該Dom並操作其方法屬性,

<user-and-dep-tree-select-modal
  ref="avaUserTreeSelect"
  title="選擇可見範圍"
  :project-id="currentProjectId"
  :visible.sync="avaUserModalVisible"
  @ok="editAvailableUser"
/>
或者
<div class="user" ref="user">dd</div>
登入後複製
// $refs
showManagerModal () {
  this.$refs.avaUserTreeSelect.showModal(this.form.managers)
  console.log(this.$refs.user.text)
},
登入後複製

Vue3.2

在Vue3.2版本使用的方式

//普通Dom
<div class="user" ref="user"></div>
//组件
<batch-adjust-department-modal ref="batchAdjustDepartmentRef" />
登入後複製
<script setup>
import { ref } from &#39;vue&#39;;
// modal调整部门弹层Dom
const batchAdjustDepartmentRef = ref(null);
const user = ref(null);
</script>
登入後複製

也許這裡有人疑問,為什麼宣告了一個和template的ref中同名的常數變數綁定了對應的dom? 這裡再補充說明:

    Vue3 在早期版本( 3.0.0-beta.21 之前)中對composition api 的支持,只能在元件選項
  • setup 函數中使用。而對應式的變數都是透過在setup()方法中return {寫入需要在模版中使用的變數或方法}
  • <script>
    import { defineComponent, ref } from &#39;vue&#39;
    
    export default defineComponent({
      name: &#39;HelloWorld&#39;,
      setup(props, ctx) {
        const count = ref(0)
        function add() {
          count.value++
        }
        // 使用return {} 把变量、方法暴露给模板
        return {
          count,
          add,
        }
      },
    })
    </script>
    登入後複製
    在3.0.0-beta.21 版本中增加了
  • <script setup> 的實驗特性。如果使用了,會提示 <script setup> 還處在實驗特性階段。
  • 在3.2.0 版本中移除
  • <script setup> 的實驗狀態,從此,宣告<script setup> 正式轉正使用,成為框架穩定的特性之一 與元件選項setup 函數對比, <script setup> 我們只需要寫更少、更簡潔的程式碼,不需要使用return {} 暴露變量和方法了,使用元件時不需要主動註冊了,會自動幫你綁定
所以在

<script setup>中宣告的變數會自動被加到在該Vue物件的本身this中,如

##

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1666
14
CakePHP 教程
1426
52
Laravel 教程
1328
25
PHP教程
1273
29
C# 教程
1253
24
PHP與Vue:完美搭檔的前端開發利器 PHP與Vue:完美搭檔的前端開發利器 Mar 16, 2024 pm 12:09 PM

PHP與Vue:完美搭檔的前端開發利器在當今網路快速發展的時代,前端開發變得愈發重要。隨著使用者對網站和應用的體驗要求越來越高,前端開發人員需要使用更有效率和靈活的工具來創建響應式和互動式的介面。 PHP和Vue.js作為前端開發領域的兩個重要技術,搭配起來可以稱得上是完美的利器。本文將探討PHP和Vue的結合,以及詳細的程式碼範例,幫助讀者更好地理解和應用這兩

Django是前端還是後端?一探究竟! Django是前端還是後端?一探究竟! Jan 19, 2024 am 08:37 AM

Django是一個由Python編寫的web應用框架,它強調快速開發和乾淨方法。儘管Django是web框架,但要回答Django是前端還是後端這個問題,需要深入理解前後端的概念。前端是指使用者直接和互動的介面,後端是指伺服器端的程序,他們透過HTTP協定進行資料的互動。在前端和後端分離的情況下,前後端程式可以獨立開發,分別實現業務邏輯和互動效果,資料的交

Go語言前端技術探秘:前端開發新視野 Go語言前端技術探秘:前端開發新視野 Mar 28, 2024 pm 01:06 PM

Go語言作為一種快速、高效的程式語言,在後端開發領域廣受歡迎。然而,很少有人將Go語言與前端開發聯繫起來。事實上,使用Go語言進行前端開發不僅可以提高效率,還能為開發者帶來全新的視野。本文將探討使用Go語言進行前端開發的可能性,並提供具體的程式碼範例,幫助讀者更了解這一領域。在傳統的前端開發中,通常會使用JavaScript、HTML和CSS來建立使用者介面

C#開發經驗分享:前端與後端協同開發技巧 C#開發經驗分享:前端與後端協同開發技巧 Nov 23, 2023 am 10:13 AM

身為C#開發者,我們的開發工作通常包括前端和後端的開發,而隨著技術的發展和專案的複雜性提高,前端與後端協同開發也變得越來越重要和複雜。本文將分享一些前端與後端協同開發的技巧,以幫助C#開發者更有效率地完成開發工作。確定好介面規範前後端的協同開發離不開API介面的交互。要確保前後端協同開發順利進行,最重要的是定義好介面規格。接口規範涉及到接口的命

前端怎麼實現即時通訊 前端怎麼實現即時通訊 Oct 09, 2023 pm 02:47 PM

實作即時通訊的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。詳細介紹:1、WebSocket,它可以在客戶端和伺服器之間建立持久連接,實現即時的雙向通信,前端可以使用WebSocket API來創建WebSocket連接,並透過發送和接收訊息來實現即時通訊;2、Long Polling,是一種模擬即時通訊的技術等等

Django:前端和後端開發都能搞定的神奇框架! Django:前端和後端開發都能搞定的神奇框架! Jan 19, 2024 am 08:52 AM

Django:前端和後端開發都能搞定的神奇框架! Django是一個高效、可擴展的網路應用程式框架。它能夠支援多種Web開發模式,包括MVC和MTV,可以輕鬆地開發出高品質的Web應用程式。 Django不僅支援後端開發,還能夠快速建構出前端的介面,透過模板語言,實現靈活的視圖展示。 Django把前端開發和後端開發融合成了一種無縫的整合,讓開發人員不必專門學習

前端面試官常問的問題 前端面試官常問的問題 Mar 19, 2024 pm 02:24 PM

在前端開發面試中,常見問題涵蓋廣泛,包括HTML/CSS基礎、JavaScript基礎、框架和函式庫、專案經驗、演算法和資料結構、效能最佳化、跨域請求、前端工程化、設計模式以及新技術和趨勢。面試官的問題旨在評估候選人的技術技能、專案經驗以及對行業趨勢的理解。因此,應試者應充分準備這些方面,以展現自己的能力和專業知識。

Golang與前端技術結合:探討Golang如何在前端領域發揮作用 Golang與前端技術結合:探討Golang如何在前端領域發揮作用 Mar 19, 2024 pm 06:15 PM

Golang與前端技術結合:探討Golang如何在前端領域發揮作用,需要具體程式碼範例隨著互聯網和行動應用的快速發展,前端技術也愈發重要。而在這個領域中,Golang作為一門強大的後端程式語言,也可以發揮重要作用。本文將探討Golang如何與前端技術結合,以及透過具體的程式碼範例來展示其在前端領域的潛力。 Golang在前端領域的角色作為一門高效、簡潔且易於學習的

See all articles
<script setup>