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

首頁(yè) web前端 前端問(wèn)答 vue dom是什麼意思啊

vue dom是什麼意思啊

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

dom是一種文件物件模型,同時(shí)也是用於html程式設(shè)計(jì)的接口,透過(guò)dom來(lái)操作頁(yè)面中的元素。 DOM是HTML文件的記憶體中物件表示,它提供了使用JavaScript與網(wǎng)頁(yè)互動(dòng)的方式。 DOM是節(jié)點(diǎn)的層次結(jié)構(gòu)(或樹(shù)),其中document節(jié)點(diǎn)為根。

vue dom是什麼意思啊

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

什麼是dom

dom是一種文檔物件模型,同時(shí)也是用於html程式設(shè)計(jì)的接口,透過(guò)dom來(lái)操作頁(yè)面中的元素。當(dāng)html頁(yè)面被實(shí)作載入的時(shí)候,瀏覽器會(huì)創(chuàng)建一個(gè)dom,給了文件一個(gè)新的邏輯結(jié)構(gòu),並且可以改變內(nèi)容和結(jié)構(gòu)。

DOM稱(chēng)為檔案物件模型(DocumentObjectModel,簡(jiǎn)稱(chēng)DOM),是W3C組織推薦的處理可擴(kuò)充置標(biāo)語(yǔ)言的標(biāo)準(zhǔn)程式介面

DOM是HTML文件的記憶體中物件表示,它提供了使用JavaScript與網(wǎng)頁(yè)互動(dòng)的方式。 DOM是節(jié)點(diǎn)的層次結(jié)構(gòu)(或樹(shù)),其中document節(jié)點(diǎn)為根。

實(shí)際上DOM是以物件導(dǎo)向的方式來(lái)描述的文檔模型。 DOM定義了表示和修改文件所需的物件和這些物件的行為和屬性以及這些物件之間的關(guān)係。

透過(guò)JavaScript,我們可以重構(gòu)整個(gè)HTML文件。例如新增、移除、變更或重排頁(yè)面上的項(xiàng)目。

要改變頁(yè)面上的某個(gè)東西,JavaScript就需要取得對(duì)HTML文件中所有元素進(jìn)行存取的入口。這個(gè)入口,連同對(duì)HTML元素進(jìn)行添加、移動(dòng)、改變或移除的方法和屬性,都是透過(guò)文件物件模型來(lái)獲得的。

什麼是虛擬DOM

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

其實(shí)它只是一層對(duì)真實(shí)DOM的抽象,以JavaScript 物件(VNode 節(jié)點(diǎn)) 作為基礎(chǔ)的樹(shù),用物件的屬性來(lái)描述節(jié)點(diǎn),最終可以透過(guò)一系列操作使這棵樹(shù)映射到真實(shí)環(huán)境上

在Javascript物件中,虛擬DOM 表現(xiàn)為一個(gè)Object物件。且最少包含標(biāo)籤名(tag)、屬性(attrs) 和子元素物件(children) 三個(gè)屬性,不同框架對(duì)這三個(gè)屬性的名命可能會(huì)有差別

建立虛擬DOM就是為了更好將虛擬的節(jié)點(diǎn)渲染到頁(yè)面視圖中,所以虛擬DOM物件的節(jié)點(diǎn)與真實(shí)DOM的屬性一一照應(yīng)

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

定義真實(shí)DOM

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

實(shí)例化vue

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

觀(guān)察render的render,我們能得到虛擬DOM

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

透過(guò)VNode,vue可以對(duì)這顆抽象樹(shù)進(jìn)行建立節(jié)點(diǎn),刪除節(jié)點(diǎn)以及修改節(jié)點(diǎn)的操作, 經(jīng)過(guò)diff演算法得出一些需要修改的最小單位,再更新視圖,減少了dom操作,提高了效能。

Vue取得DOM的幾種方法?

#雖然Vue實(shí)作了MVVM模型,將資料和表現(xiàn)進(jìn)行了分離,我們只需要更新資料就能使DOM同步更新,但是某些情況下,還是需要取得DOM元素進(jìn)行操作(例如引入的某個(gè)庫(kù)要求傳入一個(gè)根dom元素作為根節(jié)點(diǎn),或?qū)懸恍┳杂喼噶睿疚闹饕榻B幾種在Vue中取得DOM元素的方法。

使用DOM API直接找元素

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

這個(gè)方法夠簡(jiǎn)單直觀(guān),Vue元件在patch階段結(jié)束時(shí)會(huì)把 this.$el賦值為掛載的根dom元素,我們可以直接使用$elquerySelector, querySelectorAll等方法來(lái)取得相符的元素。

refs

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

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

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

<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;] // 一個(gè)包含dom元素的數(shù)組
		let ps = this.$refs[&#39;pinitem&#39;] // p元素是v-for的子元素,同樣是一個(gè)數(shù)組
		let contact1 = this.$refs[&#39;contact&#39; + this.qlist[0].id] // 還是個(gè)數(shù)組
	}
</script>

關(guān)於這個(gè)的原因,可以從Vue關(guān)於ref處理的部分程式碼得到:

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

  var vm = vnode.context;
  // vnode如果有componentInstance表明是一個(gè)組件vnode,它的componentInstance屬性是其真實(shí)的根元素vm
  // vnode如果沒(méi)有componentInstance則不是組件vnode,是實(shí)際元素vnode,直接取其根元素
  var ref = vnode.componentInstance || vnode.elm;
  var refs = vm.$refs;
  if (isRemoval) {
    ...
  } else {
  	// refInFor是模板編譯階段生成的,它是一個(gè)布爾值,為true表明此vnode在v-for中
    if (vnode.data.refInFor) {
      if (!Array.isArray(refs[key])) {
        refs[key] = [ref]; // 就算元素唯一,也會(huì)被處理成數(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;, {
  // 當(dāng)被綁定的元素插入到 DOM 中時(shí)……
  inserted: function (el) {
    // 聚焦元素
    el.focus()
  }
})

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

關(guān)於自訂指令,在一些元件庫(kù)和事件上報(bào)等場(chǎng)景下非常有用。

【相關(guān)推薦:vuejs影片教學(xué)web前端開(kāi)發(fā)

以上是vue dom是什麼意思啊的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線(xiàn)上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門(mén)話(huà)題

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

ReactivitytransforminVue3aimedtosimplifyhandlingreactivedatabyautomaticallytrackingandmanagingreactivitywithoutrequiringmanualref()or.valueusage.Itsoughttoreduceboilerplateandimprovecodereadabilitybytreatingvariableslikeletandconstasautomaticallyreac

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

國(guó)際化和傾斜度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

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中實(shí)現(xiàn)過(guò)渡和動(dòng)畫(huà)? 如何在VUE中實(shí)現(xiàn)過(guò)渡和動(dòng)畫(huà)? Jun 24, 2025 pm 02:17 PM

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

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

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

如何使用VUE構(gòu)建組件庫(kù)? 如何使用VUE構(gòu)建組件庫(kù)? Jul 10, 2025 pm 12:14 PM

搭建Vue組件庫(kù)需圍繞業(yè)務(wù)場(chǎng)景設(shè)計(jì)結(jié)構(gòu),並遵循開(kāi)發(fā)、測(cè)試、發(fā)布的完整流程。 1.結(jié)構(gòu)設(shè)計(jì)應(yīng)按功能模塊分類(lèi),包括基礎(chǔ)組件、佈局組件和業(yè)務(wù)組件;2.使用SCSS或CSS變量統(tǒng)一主題與樣式;3.統(tǒng)一命名規(guī)範(fàn)並引入ESLint和Prettier保證代碼風(fēng)格一致;4.配套文檔站點(diǎn)展示組件用法;5.使用Vite等工具打包為NPM包並配置rollupOptions;6.發(fā)佈時(shí)遵循semver規(guī)範(fàn)管理版本與changelog。

如何用PHP開(kāi)發(fā)問(wèn)答社區(qū)平臺(tái) PHP互動(dòng)社區(qū)變現(xiàn)模式詳解 如何用PHP開(kāi)發(fā)問(wèn)答社區(qū)平臺(tái) PHP互動(dòng)社區(qū)變現(xiàn)模式詳解 Jul 23, 2025 pm 07:21 PM

1.PHP開(kāi)發(fā)問(wèn)答社區(qū)首選Laravel MySQL Vue/React組合,因生態(tài)成熟、開(kāi)發(fā)效率高;2.高性能需依賴(lài)緩存(Redis)、數(shù)據(jù)庫(kù)優(yōu)化、CDN和異步隊(duì)列;3.安全性必須做好輸入過(guò)濾、CSRF防護(hù)、HTTPS、密碼加密及權(quán)限控制;4.變現(xiàn)可選廣告、會(huì)員訂閱、打賞、傭金、知識(shí)付費(fèi)等模式,核心是匹配社區(qū)調(diào)性和用戶(hù)需求。

See all articles