国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

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

vue dom是什麼意思啊

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

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

vue dom是什麼意思啊

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

什麼是dom

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

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

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

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

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

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

什麼是虛擬DOM

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

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

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

建立虛擬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可以對這顆抽象樹進(jìn)行建立節(jié)點,刪除節(jié)點以及修改節(jié)點的操作, 經(jīng)過diff演算法得出一些需要修改的最小單位,再更新視圖,減少了dom操作,提高了效能。

Vue取得DOM的幾種方法?

#雖然Vue實作了MVVM模型,將資料和表現(xiàn)進(jìn)行了分離,我們只需要更新資料就能使DOM同步更新,但是某些情況下,還是需要取得DOM元素進(jìn)行操作(例如引入的某個庫要求傳入一個根dom元素作為根節(jié)點,或?qū)懸恍┳杂喼噶睿?,本文主要介紹幾種在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)的都是一個陣列(就算動態(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;] // 一個包含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;, {
  // 當(dāng)被綁定的元素插入到 DOM 中時……
  inserted: function (el) {
    // 聚焦元素
    el.focus()
  }
})

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

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

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

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

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

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

Dreamweaver CS6

Dreamweaver CS6

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

SublimeText3 Mac版

SublimeText3 Mac版

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

vue怎麼給按鈕添加函數(shù) vue怎麼給按鈕添加函數(shù) Apr 08, 2025 am 08:51 AM

可以通過以下步驟為 Vue 按鈕添加函數(shù):將 HTML 模板中的按鈕綁定到一個方法。在 Vue 實例中定義該方法並編寫函數(shù)邏輯。

React與Vue:Netflix使用哪個框架? React與Vue:Netflix使用哪個框架? Apr 14, 2025 am 12:19 AM

NetflixusesAcustomFrameworkcalled“ Gibbon” BuiltonReact,notReactorVuedIrectly.1)TeamSperience:selectBasedonFamiliarity.2)ProjectComplexity:vueforsimplerprojects:reactforforforproproject,reactforforforcompleplexones.3)cocatizationneedneeds:reactoffipicatizationneedneedneedneedneedneeds:reactoffersizationneedneedneedneedneeds:reactoffersizatization needefersmoreflexibleise.4)

Netflix的前端:React(或VUE)的示例和應(yīng)用 Netflix的前端:React(或VUE)的示例和應(yīng)用 Apr 16, 2025 am 12:08 AM

Netflix使用React作為其前端框架。 1)React的組件化開發(fā)模式和強(qiáng)大生態(tài)系統(tǒng)是Netflix選擇它的主要原因。 2)通過組件化,Netflix將復(fù)雜界面拆分成可管理的小塊,如視頻播放器、推薦列表和用戶評論。 3)React的虛擬DOM和組件生命週期優(yōu)化了渲染效率和用戶交互管理。

vue的div怎麼跳轉(zhuǎn) vue的div怎麼跳轉(zhuǎn) Apr 08, 2025 am 09:18 AM

Vue 中 div 元素跳轉(zhuǎn)的方法有兩種:使用 Vue Router,添加 router-link 組件。添加 @click 事件監(jiān)聽器,調(diào)用 this.$router.push() 方法跳轉(zhuǎn)。

反應(yīng),vue和Netflix前端的未來 反應(yīng),vue和Netflix前端的未來 Apr 12, 2025 am 12:12 AM

Netflix主要使用React作為前端框架,輔以Vue用於特定功能。 1)React的組件化和虛擬DOM提升了Netflix應(yīng)用的性能和開發(fā)效率。 2)Vue在Netflix的內(nèi)部工具和小型項目中應(yīng)用,其靈活性和易用性是關(guān)鍵。

vue怎麼a標(biāo)籤跳轉(zhuǎn) vue怎麼a標(biāo)籤跳轉(zhuǎn) Apr 08, 2025 am 09:24 AM

實現(xiàn) Vue 中 a 標(biāo)籤跳轉(zhuǎn)的方法包括:HTML 模板中使用 a 標(biāo)籤指定 href 屬性。使用 Vue 路由的 router-link 組件。使用 JavaScript 的 this.$router.push() 方法??赏ㄟ^ query 參數(shù)傳遞參數(shù),並在 router 選項中配置路由以進(jìn)行動態(tài)跳轉(zhuǎn)。

vue怎麼實現(xiàn)組件跳轉(zhuǎn) vue怎麼實現(xiàn)組件跳轉(zhuǎn) Apr 08, 2025 am 09:21 AM

Vue 中實現(xiàn)組件跳轉(zhuǎn)有以下方法:使用 router-link 和 &lt;router-view&gt; 組件進(jìn)行超鏈接跳轉(zhuǎn),指定 :to 屬性為目標(biāo)路徑。直接使用 &lt;router-view&gt; 組件顯示當(dāng)前路由渲染的組件。使用 router.push() 和 router.replace() 方法進(jìn)行程序化導(dǎo)航,前者保存歷史記錄,後者替換當(dāng)前路由不留記錄。

怎樣開發(fā)一個完整的PythonWeb應(yīng)用程序? 怎樣開發(fā)一個完整的PythonWeb應(yīng)用程序? May 23, 2025 pm 10:39 PM

要開發(fā)一個完整的PythonWeb應(yīng)用程序,應(yīng)遵循以下步驟:1.選擇合適的框架,如Django或Flask。 2.集成數(shù)據(jù)庫,使用ORM如SQLAlchemy。 3.設(shè)計前端,使用Vue或React。 4.進(jìn)行測試,使用pytest或unittest。 5.部署應(yīng)用,使用Docker和平臺如Heroku或AWS。通過這些步驟,可以構(gòu)建出功能強(qiáng)大且高效的Web應(yīng)用。

See all articles