官網(wǎng)上的說(shuō)明
為扶綏等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及扶綏網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)、扶綏網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!一、前言#
在之前的前端開(kāi)發(fā)中,為了實(shí)現(xiàn)我們的需求,通常采用的方案是通過(guò) JS/Jquery 直接操縱頁(yè)面的 DOM 元素,得益于 Jquery 對(duì)于 DOM 元素優(yōu)異的操作能力,我們可以很輕易的對(duì)獲取到的 DOM 元素進(jìn)行操作。但是,當(dāng)我們開(kāi)始在前端項(xiàng)目中使用 Vue 這類的 MVVM 框架之后,對(duì)于 DOM 的操作我們就應(yīng)當(dāng)完全的交給框架,而我們只需要關(guān)注于數(shù)據(jù)。難道,在 Vue 中就不能手動(dòng)獲取到頁(yè)面上的 DOM 元素了嗎,答案當(dāng)然是可以手動(dòng)獲取到 DOM 元素的,在 Vue 中我們可以通過(guò)使用 ref 實(shí)現(xiàn)獲取 DOM 元素的功能,當(dāng)然,這也只是 ref 其中一項(xiàng)的功能。本章,我們就來(lái)學(xué)習(xí) Vue 中 ref 的相關(guān)使用。
倉(cāng)儲(chǔ)地址:https://github.com/Lanesra712/VueTrial/blob/master/chapter02-bronze/ref.html
二、干貨合集#
ref 在 Vue 中是用來(lái)給元素或是子組件注冊(cè)引用信息到父組件或是 Vue 實(shí)例上,注冊(cè)后的引用信息都會(huì)呈現(xiàn)在父組件/Vue 實(shí)例的 $.refs 上,這時(shí),我們就可以通過(guò) $.refs
獲取到引用的 DOM 對(duì)象或是子組件信息。
例如,我們可以獲取到頁(yè)面上添加了 ref 的 input 輸入框的值,對(duì)于子組件來(lái)說(shuō),我們可以直接獲取到子組件 data 選項(xiàng)中的數(shù)據(jù),或是直接調(diào)用子組件的方法。
1、虛擬 DOM#
在我們使用 JS/Jquery 直接對(duì) DOM 元素進(jìn)行操作時(shí),不管是對(duì)元素樣式的修改(背景顏色從紅色變成藍(lán)色)還是對(duì)頁(yè)面中的某些布局進(jìn)行動(dòng)態(tài)調(diào)整(通過(guò)點(diǎn)擊按鈕在列表中添加一行新的數(shù)據(jù)),這都會(huì)造成頁(yè)面的重新渲染,從而影響我們網(wǎng)站的性能。而在 Vue 中,通過(guò)在內(nèi)存中生成與真實(shí) DOM 與之對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)(虛擬 DOM),當(dāng)頁(yè)面發(fā)生變化時(shí),通過(guò)新的虛擬 DOM 樹(shù)與舊的虛擬 DOM 樹(shù)進(jìn)行比對(duì),就能很快的找出差異點(diǎn),從而得出應(yīng)施加到真實(shí) DOM 上的改動(dòng)。
2、使用 ref 獲取頁(yè)面 DOM 元素#
在使用 JS/Jquery 獲取頁(yè)面的 DOM 元素時(shí),我們一般是根據(jù) id、class、標(biāo)簽、屬性等其它標(biāo)識(shí)來(lái)獲取到頁(yè)面上的 DOM 元素。嗯,可以說(shuō),我們很難拋棄 Jquery 的一個(gè)重大原因,就是當(dāng)我們需要獲取到頁(yè)面上的 DOM 元素時(shí),使用 Jquery 的 API 相比于原生的 JS 代碼,簡(jiǎn)單到極致,有木有。
document.getElementById('id').value => $('#id').val()
那么,難道我們?cè)?Vue 中獲取 DOM 元素還是采用這樣的方式?
答案當(dāng)然是否定的,這種直接操縱 DOM 元素的方式,與我們使用 Vue 的初衷不符,雖然能達(dá)成效果,但是卻不提倡,這里我們就可以使用 ref 來(lái)獲取頁(yè)面上的 DOM 元素。
在下面的代碼中,我在 input 上添加了一個(gè) ref 屬性,之后,我們就可以在 Vue 實(shí)例中獲取到這個(gè) input 輸入框的值。這里,我在 beforeMount、mounted 這兩個(gè) Vue 中的生命周期鉤子函數(shù)以及一個(gè)按鈕的點(diǎn)擊事件中嘗試獲取到這個(gè) input 輸入框的值。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。