亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁 web前端 前端問答 vue dom是什么意思啊

vue dom是什么意思啊

Dec 20, 2022 pm 08:41 PM
vue dom 虛擬dom

dom是一種文檔對象模型,同時也是用于html編程的接口,通過dom來操作頁面中的元素。DOM是HTML文檔的內(nèi)存中對象表示,它提供了使用JavaScript與網(wǎng)頁交互的方式。DOM是節(jié)點的層次結(jié)構(gòu)(或樹),其中document節(jié)點作為根。

vue dom是什么意思啊

本教程操作環(huán)境:windows7系統(tǒng)、vue3版,DELL G3電腦。

什么是dom

dom是一種文檔對象模型,同時也是用于html編程的接口,通過dom來操作頁面中的元素。當html頁面被實現(xiàn)加載的時候,瀏覽器會創(chuàng)建一個dom,給文檔提供了一種新的邏輯結(jié)構(gòu),并且可以改變內(nèi)容和結(jié)構(gòu)。

DOM稱為文件對象模型(DocumentObjectModel,簡稱DOM),是W3C組織推薦的處理可擴展置標語言的標準編程接口

DOM是HTML文檔的內(nèi)存中對象表示,它提供了使用JavaScript與網(wǎng)頁交互的方式。DOM是節(jié)點的層次結(jié)構(gòu)(或樹),其中document節(jié)點作為根。

實際上DOM是以面向?qū)ο蟮姆绞絹砻枋龅奈臋n模型。DOM定義了表示和修改文檔所需的對象和這些對象的行為和屬性以及這些對象之間的關(guān)系。

通過JavaScript,我們可以重構(gòu)整個HTML文檔。比如添加、移除、改變或重排頁面上的項目。

要改變頁面上的某個東西,JavaScript就需要獲得對HTML文檔中所有元素進行訪問的入口。這個入口,連同對HTML元素進行添加、移動、改變或移除的方法和屬性,都是通過文檔對象模型來獲得的。

什么是虛擬DOM

虛擬 DOM (Virtual DOM )這個概念相信大家都不陌生,從 React 到 Vue ,虛擬 DOM 為這兩個框架都帶來了跨平臺的能力(React-Native 和 Weex)

實際上它只是一層對真實DOM的抽象,以JavaScript 對象 (VNode 節(jié)點) 作為基礎(chǔ)的樹,用對象的屬性來描述節(jié)點,最終可以通過一系列操作使這棵樹映射到真實環(huán)境上

在Javascript對象中,虛擬DOM 表現(xiàn)為一個 Object對象。并且最少包含標簽名 (tag)、屬性 (attrs) 和子元素對象 (children) 三個屬性,不同框架對這三個屬性的名命可能會有差別

創(chuàng)建虛擬DOM就是為了更好將虛擬的節(jié)點渲染到頁面視圖中,所以虛擬DOM對象的節(jié)點與真實DOM的屬性一一照應(yīng)

在vue中同樣使用到了虛擬DOM技術(shù)

定義真實DOM

<div id="app">
    <p class="p">節(jié)點內(nèi)容</p>
    <h3>{{ foo }}</h3>
</div>

實例化vue

const app = new Vue({
    el:"#app",
    data:{
        foo:"foo"
    }
})

觀察render的render,我們能得到虛擬DOM

(function anonymous(
) {
	with(this){return _c(&#39;div&#39;,{attrs:{"id":"app"}},[_c(&#39;p&#39;,{staticClass:"p"},
					  [_v("節(jié)點內(nèi)容")]),_v(" "),_c(&#39;h3&#39;,[_v(_s(foo))])])}})

通過VNode,vue可以對這顆抽象樹進行創(chuàng)建節(jié)點,刪除節(jié)點以及修改節(jié)點的操作, 經(jīng)過diff算法得出一些需要修改的最小單位,再更新視圖,減少了dom操作,提高了性能。

Vue獲取DOM的幾種方法

雖然Vue實現(xiàn)了MVVM模型,將數(shù)據(jù)和表現(xiàn)進行了分離,我們只需要更新數(shù)據(jù)就能使DOM同步更新,但是某些情況下,還是需要獲取DOM元素進行操作(比如引入的某個庫要求傳入一個根dom元素作為根節(jié)點,或者寫一些自定義指令),本文主要介紹幾種在Vue中獲取DOM元素的方法。

使用DOM API直接找元素

<script>
	...
	mounted () {
		let elm = this.$el.querySelector(&#39;#id&#39;)
	}
</script>

這種方法足夠簡單直觀,Vue組件在patch階段結(jié)束時會把this.$el賦值為掛載的根dom元素,我們可以直接使用$elquerySelector, querySelectorAll等方法獲取匹配的元素。

refs

<template>
	<div ref="bar">{{ foo }}</div>
	<MyAvatar ref="avatar" />
	...
</template>
<script>
	...
	mounted () {
		let foo = this.$refs[&#39;bar&#39;] // 一個dom元素
		let avatar = this.$refs[&#39;avatar&#39;] // 一個組件實例對象
	}
</script>

使用組件實例的$refs即可拿到組件上ref屬性對應(yīng)的元素。
如果ref屬性加在一個組件上,那么拿到的是這個組件的實例,否則拿到的就是dom元素了。

值得注意的是包含v-for循環(huán)模板指令的情況,其循環(huán)元素和子元素上ref屬性對應(yīng)的都是一個數(shù)組(就算動態(tài)生成ref,也是數(shù)組):

<template>
	<div v-for="item in qlist" :key="item.id" ref="qitem">
		<h3>{{ item.title  }}</h3>
		<p ref="pinitem">{{ item.desc }}</p>
		<p :ref="&#39;contact&#39;+item.id">{{ item.contact }}</p>
	</div>
	...
</template>
<script>
	...
	data () {
		return {
			qlist: [
				{ id: 10032, title: &#39;abc&#39;, desc: &#39;aadfdcc&#39;, contact: 123 },
				{ id: 11031, title: &#39;def&#39;, desc: &#39;--*--&#39;, contact: 856 },
				{ id: 20332, title: &#39;ghi&#39;, desc: &#39;?/>,<{]&#39;, contact: 900 }
			]
		}
	},
	mounted () {
		let foo = this.$refs[&#39;qitem&#39;] // 一個包含dom元素的數(shù)組
		let ps = this.$refs[&#39;pinitem&#39;] // p元素是v-for的子元素,同樣是一個數(shù)組
		let contact1 = this.$refs[&#39;contact&#39; + this.qlist[0].id] // 還是個數(shù)組
	}
</script>

關(guān)于這個的原因,可以從Vue關(guān)于ref處理的部分代碼得到:

function registerRef (vnode, isRemoval) {
  var key = vnode.data.ref;
  if (!isDef(key)) { return }

  var vm = vnode.context;
  // vnode如果有componentInstance表明是一個組件vnode,它的componentInstance屬性是其真實的根元素vm
  // vnode如果沒有componentInstance則不是組件vnode,是實際元素vnode,直接取其根元素
  var ref = vnode.componentInstance || vnode.elm;
  var refs = vm.$refs;
  if (isRemoval) {
    ...
  } else {
  	// refInFor是模板編譯階段生成的,它是一個布爾值,為true表明此vnode在v-for中
    if (vnode.data.refInFor) {
      if (!Array.isArray(refs[key])) {
        refs[key] = [ref]; // 就算元素唯一,也會被處理成數(shù)組
      } else if (refs[key].indexOf(ref) < 0) {
        // $flow-disable-line
        refs[key].push(ref);
      }
    } else {
      refs[key] = ref;
    }
  }
}

使用自定義指令

Vue提供了自定義指令,官方文檔給出了如下的使用方法,其中el就是dom元素的引用

Vue.directive(&#39;focus&#39;, {
  // 當被綁定的元素插入到 DOM 中時……
  inserted: function (el) {
    // 聚焦元素
    el.focus()
  }
})

// 在模板中
<template>
	<input v-model="name" v-focus />
</template>

關(guān)于自定義指令,在一些組件庫和事件上報等場景下非常有用。

【相關(guān)推薦:vuejs視頻教程、web前端開發(fā)

以上是vue dom是什么意思啊的詳細內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔相應(yīng)法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
Vue的反應(yīng)性轉(zhuǎn)換(實驗,然后被刪除)的意義是什么? Vue的反應(yīng)性轉(zhuǎn)換(實驗,然后被刪除)的意義是什么? Jun 20, 2025 am 01:01 AM

ReactivitytransforminVue3aimedtosimplifyhandlingreactivedatabyautomaticallytrackingandmanagingreactivitywithoutrequiringmanualref()or.valueusage.Itsoughttoreduceboilerplateandimprovecodereadabilitybytreatingvariableslikeletandconstasautomaticallyreac

如何在VUE應(yīng)用程序中實施國際化(I18N)和本地化(L10N)? 如何在VUE應(yīng)用程序中實施國際化(I18N)和本地化(L10N)? Jun 20, 2025 am 01:00 AM

國際化和傾斜度invueAppsareprimandermedusingthevuei18nplugin.1.installvue-i18nvianpmoryarn.2.createlo calejsonfiles(例如,en.json,es.json)fortranslationMessages.3.setupthei18ninstanceinmain.jswithlocaleconfigurationandmessagefil

使用VUE中的V-For指令使用關(guān)鍵屬性(:key)的好處是什么? 使用VUE中的V-For指令使用關(guān)鍵屬性(:key)的好處是什么? Jun 08, 2025 am 12:14 AM

Usingthe:keyattributewithv-forinVueisessentialforperformanceandcorrectbehavior.First,ithelpsVuetrackeachelementefficientlybyenablingthevirtualDOMdiffingalgorithmtoidentifyandupdateonlywhat’snecessary.Second,itpreservescomponentstateinsideloops,ensuri

您如何優(yōu)化VUE中大型列表或復雜組件的重新渲染? 您如何優(yōu)化VUE中大型列表或復雜組件的重新渲染? Jun 07, 2025 am 12:14 AM

優(yōu)化Vue中大型列表和復雜組件性能的方法包括:1.使用v-once指令處理靜態(tài)內(nèi)容,減少不必要的更新;2.實現(xiàn)虛擬滾動,僅渲染可視區(qū)域的內(nèi)容,如使用vue-virtual-scroller庫;3.通過keep-alive或v-once緩存組件,避免重復掛載;4.利用計算屬性和偵聽器優(yōu)化響應(yīng)式邏輯,減少重渲染范圍;5.遵循最佳實踐,如在v-for中使用唯一key、避免模板中的內(nèi)聯(lián)函數(shù),并使用性能分析工具定位瓶頸。這些策略能有效提升應(yīng)用流暢度。

VUE中的服務(wù)器端渲染SSR是什么? VUE中的服務(wù)器端渲染SSR是什么? Jun 25, 2025 am 12:49 AM

Server-Serdendering(SSR)InvueImProvesperformandSeobyGeneratingHtmlonTheserver.1.TheserverrunsvueApcodeAmpCodeAndGeneratesHtmlbBasedonThecurrentRoute.2.thathtmlssenttothebrowserimmed.3.vuehirative eveirtive eveirtive eveirtive eveirtive eveirtive eveirtive eveirtive eveirtiveThepage evepage evepage

如何在VUE中實現(xiàn)過渡和動畫? 如何在VUE中實現(xiàn)過渡和動畫? Jun 24, 2025 pm 02:17 PM

ToaddtransitionsandanimationsinVue,usebuilt-incomponentslikeand,applyCSSclasses,leveragetransitionhooksforcontrol,andoptimizeperformance.1.WrapelementswithandapplyCSStransitionclasseslikev-enter-activeforbasicfadeorslideeffects.2.Useforanimatingdynam

vue中NextTick函數(shù)的目的是什么?何時需要? vue中NextTick函數(shù)的目的是什么?何時需要? Jun 19, 2025 am 12:58 AM

nextTick在Vue中用于在DOM更新后執(zhí)行代碼。當數(shù)據(jù)變化時,Vue不會立即更新DOM,而是將其放入隊列,在下一個事件循環(huán)“tick”中處理,因此若需訪問或操作更新后的DOM,應(yīng)使用nextTick;常見場景包括:訪問更新后的DOM內(nèi)容、與依賴DOM狀態(tài)的第三方庫協(xié)作、基于元素尺寸進行計算;其使用方式包括作為組件方法調(diào)用this.$nextTick、導入后單獨使用、結(jié)合async/await;注意事項有:避免過度使用、多數(shù)情況下無需手動觸發(fā)、一次nextTick可捕獲多個更新。

如何在VUE應(yīng)用程序中管理和訪問環(huán)境變量? 如何在VUE應(yīng)用程序中管理和訪問環(huán)境變量? Jun 14, 2025 am 12:22 AM

在Vue應(yīng)用中管理環(huán)境變量需遵循特定規(guī)則并使用.env文件。首先,僅以VUE_APP_為前綴的變量才會暴露給應(yīng)用;其次,不同環(huán)境對應(yīng)不同.env文件,如.env.development、.env.production等;第三,變量在構(gòu)建時注入,無法運行時更改。具體步驟包括:1.在項目根目錄創(chuàng)建.env文件;2.按模式使用對應(yīng)的.env文件,如.env.staging;3.在代碼中通過process.env訪問變量;4.可將變量集中導入config.js統(tǒng)一管理;5.若需多環(huán)境支持,可在packa

See all articles