摘要:最近有時(shí)間,整理一下的知識(shí)點(diǎn),很多都是面試常見的的生命周期如果你能理解了這張圖,也就對(duì)的生命周期有了一個(gè)大致的了解。創(chuàng)建前后在階段,實(shí)例的掛載元素還沒有。模式下,前端的必須和實(shí)際向后端發(fā)起請(qǐng)求的一致,如。
最近有時(shí)間,整理一下Vue的知識(shí)點(diǎn),很多都是面試常見的
1、Vue的生命周期如果你能理解了這張圖,也就對(duì)Vue的生命周期有了一個(gè)大致的了解。
vue生命周期總共分為8個(gè)階段 創(chuàng)建前/后,載入前/后,更新前/后,銷毀前/后。
創(chuàng)建/前后:在beforeCreated階段,vue實(shí)例的掛載元素el還沒有。在beforeCreated階段可以添加loading事件,在created階段發(fā)起后端請(qǐng)求,拿回?cái)?shù)據(jù)
載入前/后:在beforeMount階段,vue實(shí)例的$el和data都初始化,但是掛載之前為虛擬的dom節(jié)點(diǎn),data.message還未替換,頁(yè)面無重新渲染。在mounted階段,vue實(shí)例掛載完成,data.message成功渲染。
更新前/后:當(dāng)data變化時(shí),會(huì)觸發(fā)beforeUpdate和updated方法。
銷毀前/后:在執(zhí)行destroy方法后,對(duì)data的改變不會(huì)再觸發(fā)周期函數(shù),說明此時(shí)vue實(shí)例已經(jīng)解除了事件監(jiān)聽以及和dom的綁定,但是dom結(jié)構(gòu)依然存在。
第一次頁(yè)面加載會(huì)觸發(fā)哪幾個(gè)鉤子? 答:會(huì)觸發(fā) 下面這幾個(gè)beforeCreate, created, beforeMount, mounted 。 DOM 渲染在 哪個(gè)周期中就已經(jīng)完成? 答:DOM 渲染在 mounted 中就已經(jīng)完成了。2、對(duì)MVVM開發(fā)模式的理解?
MVVM分為Model、View、ViewModel三者。
Model 代表數(shù)據(jù)模型,數(shù)據(jù)和業(yè)務(wù)邏輯都在Model層中定義;
View 代表UI視圖,負(fù)責(zé)數(shù)據(jù)的展示;
ViewModel 負(fù)責(zé)監(jiān)聽 Model 中數(shù)據(jù)的改變并且控制視圖的更新,處理用戶交互操作;
Model 和 View 并無直接關(guān)聯(lián),而是通過 ViewModel 來進(jìn)行聯(lián)系的,Model 和 ViewModel 之間有著雙向數(shù)據(jù)綁定的聯(lián)系。
這種模式實(shí)現(xiàn)了 Model 和 View 的數(shù)據(jù)自動(dòng)同步,因此開發(fā)者只需要專注對(duì)數(shù)據(jù)的維護(hù)操作即可,而不需要自己操作 dom。
答:vue.js 是采用數(shù)據(jù)劫持結(jié)合發(fā)布者-訂閱者模式的方式,通過 Object.defineProperty()來劫持各個(gè)屬性的
setter,getter,在數(shù)據(jù)變動(dòng)時(shí)發(fā)布消息 給訂閱者,觸發(fā)相應(yīng)的監(jiān)聽回調(diào)。
具體步驟:
第一步:需要observe的數(shù)據(jù)對(duì)象進(jìn)行遞歸遍歷,包括子屬性對(duì)象的屬性,都加上setter和getter
這樣的話,給這個(gè)對(duì)象的某個(gè)值賦值,就會(huì)觸發(fā)setter,那么就能監(jiān)聽到了數(shù)據(jù)變化
第二步:compile解析模板指令,將模板中的變量替換成數(shù)據(jù),然后初始化渲染頁(yè)面視圖,并將每個(gè)指令對(duì)應(yīng)的節(jié)點(diǎn)綁定
更新函數(shù),添加監(jiān)聽數(shù)據(jù)的訂閱者,一旦數(shù)據(jù)有變動(dòng),收到通知,更新視圖
第三步:Watcher訂閱者是Observer和Compile之間通信的橋梁,主要做的事情是:
1、在自身實(shí)例化時(shí)往屬性訂閱器(dep)里面添加自己
2、自身必須有一個(gè)update()方法
3、待屬性變動(dòng)dep.notice()通知時(shí),能調(diào)用自身的update()方法,并觸發(fā)Compile中綁定的回調(diào),則功成身退。
第四步:MVVM作為數(shù)據(jù)綁定的入口,整合Observer、Compile和Watcher三者,通過Observer來監(jiān)聽自己的model數(shù)據(jù)變化,通過Compile來解析編譯模板指令,最終利用Watcher搭起Observer和Compile之間的通信橋梁,達(dá)到數(shù)據(jù)變化->視圖更新;視圖交互變化(input)->數(shù)據(jù)model變更的雙向綁定效果。
詳細(xì)請(qǐng)看:Vue 雙向數(shù)據(jù)綁定原理詳細(xì)分析
4、v-if 和 v-show 有什么區(qū)別?v-show 僅僅控制元素的顯示方式,將 display 屬性在 block 和 none 來回切換;而v-if會(huì)控制這個(gè) DOM 節(jié)點(diǎn)的存在與否。當(dāng)我們需要經(jīng)常切換某個(gè)元素的顯示/隱藏時(shí),使用v-show會(huì)更加節(jié)省性能上的開銷;當(dāng)只需要一次顯示或隱藏時(shí),使用v-if更加合理。5、父子組件之間的傳值和通信?
父組件向子組件傳值:
1)子組件在props中創(chuàng)建一個(gè)屬性,用來接收父組件傳過來的值;
2)在父組件中注冊(cè)子組件;
3)在子組件標(biāo)簽中添加子組件props中創(chuàng)建的屬性;
4)把需要傳給子組件的值賦給該屬性
子組件向父組件傳值:6、Vue的路由實(shí)現(xiàn):hash模式 和 history模式
1)子組件中需要以某種方式(如點(diǎn)擊事件)的方法來觸發(fā)一個(gè)自定義的事件;
2)將需要傳的值作為$emit的第二個(gè)參數(shù),該值將作為實(shí)參傳給響應(yīng)事件的方法;
3)在父組件中注冊(cè)子組件并在子組件標(biāo)簽上綁定自定義事件的監(jiān)聽。
hash模式:在瀏覽器中符號(hào)“#”,#以及#后面的字符稱之為hash,用window.location.hash讀??;
特點(diǎn):hash雖然在URL中,但不被包括在HTTP請(qǐng)求中;用來指導(dǎo)瀏覽器動(dòng)作,對(duì)服務(wù)端安全無用,hash不會(huì)重加載頁(yè)面。
hash 模式下,僅 hash 符號(hào)之前的內(nèi)容會(huì)被包含在請(qǐng)求中,如 http://www.xxx.com,因此對(duì)于后端來說,即使沒有做到對(duì)路由的全覆蓋,也不會(huì)返回 404 錯(cuò)誤。
history模式:history采用HTML5的新特性;且提供了兩個(gè)新方法:pushState(),replaceState()可以對(duì)瀏覽器歷史記錄棧進(jìn)行修改,以及popState事件的監(jiān)聽到狀態(tài)變更。7、vue路由的鉤子函數(shù)
history 模式下,前端的 URL 必須和實(shí)際向后端發(fā)起請(qǐng)求的 URL 一致,如 http://www.xxx.com/items/id。后端如果缺少對(duì) /items/id 的路由處理,將返回 404 錯(cuò)誤。Vue-Router 官網(wǎng)里如此描述:“不過這種模式要玩好,還需要后臺(tái)配置支持……所以呢,你要在服務(wù)端增加一個(gè)覆蓋所有情況的候選資源:如果 URL 匹配不到任何靜態(tài)資源,則應(yīng)該返回同一個(gè) index.html 頁(yè)面,這個(gè)頁(yè)面就是你 app 依賴的頁(yè)面。”
首頁(yè)可以控制導(dǎo)航跳轉(zhuǎn),beforeEach,afterEach等,一般用于頁(yè)面title的修改。一些需要登錄才能調(diào)整頁(yè)面的重定向功能。8、vue等單頁(yè)面應(yīng)用及其優(yōu)缺點(diǎn)
beforeEach主要有3個(gè)參數(shù)to,from,next:
to:route即將進(jìn)入的目標(biāo)路由對(duì)象,
from:route當(dāng)前導(dǎo)航正要離開的路由
next:function一定要調(diào)用該方法resolve這個(gè)鉤子。執(zhí)行效果依賴next方法的調(diào)用參數(shù)。可以控制網(wǎng)頁(yè)的跳轉(zhuǎn)。
優(yōu)點(diǎn):Vue 的目標(biāo)是通過盡可能簡(jiǎn)單的 API 實(shí)現(xiàn)響應(yīng)的數(shù)據(jù)綁定和組合的視圖組件,核心是一個(gè)響應(yīng)的數(shù)據(jù)綁定系統(tǒng)。MVVM、數(shù)據(jù)驅(qū)動(dòng)、組件化、輕量、簡(jiǎn)潔、高效、快速、模塊友好。
缺點(diǎn):不支持低版本的瀏覽器,最低只支持到IE9;不利于SEO的優(yōu)化(如果要支持SEO,建議通過服務(wù)端來進(jìn)行渲染組件);第一次加載首頁(yè)耗時(shí)相對(duì)長(zhǎng)一些;不可以使用瀏覽器的導(dǎo)航按鈕需要自行實(shí)現(xiàn)前進(jìn)、后退。
9、vue中 key 值的作用?
key的作用主要是為了高效的更新虛擬DOM。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/105265.html
摘要:五六月份推薦集合查看最新的請(qǐng)點(diǎn)擊集前端最近很火的框架資源定時(shí)更新,歡迎一下。蘇幕遮燎沈香宋周邦彥燎沈香,消溽暑。鳥雀呼晴,侵曉窺檐語(yǔ)。葉上初陽(yáng)乾宿雨,水面清圓,一一風(fēng)荷舉。家住吳門,久作長(zhǎng)安旅。五月漁郎相憶否。小楫輕舟,夢(mèng)入芙蓉浦。 五、六月份推薦集合 查看github最新的Vue weekly;請(qǐng)::點(diǎn)擊::集web前端最近很火的vue2框架資源;定時(shí)更新,歡迎 Star 一下。 蘇...
摘要:五六月份推薦集合查看最新的請(qǐng)點(diǎn)擊集前端最近很火的框架資源定時(shí)更新,歡迎一下。蘇幕遮燎沈香宋周邦彥燎沈香,消溽暑。鳥雀呼晴,侵曉窺檐語(yǔ)。葉上初陽(yáng)乾宿雨,水面清圓,一一風(fēng)荷舉。家住吳門,久作長(zhǎng)安旅。五月漁郎相憶否。小楫輕舟,夢(mèng)入芙蓉浦。 五、六月份推薦集合 查看github最新的Vue weekly;請(qǐng)::點(diǎn)擊::集web前端最近很火的vue2框架資源;定時(shí)更新,歡迎 Star 一下。 蘇...
摘要:官方資料微信公眾平臺(tái)注冊(cè)小程序。官網(wǎng)開發(fā)文檔社區(qū)開發(fā)工具部署微信小程序微信小程序本身不需要部署,在微信開發(fā)工具中直接上傳代碼就行。 為什么 學(xué)習(xí) Java 三年,目前已經(jīng)工作了2年,因?yàn)樽詫W(xué),基礎(chǔ)差,所以打算年末總結(jié)一下常見的基礎(chǔ)知識(shí)和面試點(diǎn); 也可以通過獨(dú)立做一個(gè)項(xiàng)目整合自己工作期間學(xué)習(xí)的知識(shí),加深印象。 但是想著回家或是平時(shí)手機(jī)用的多,做一款A(yù)PP和小程序很方便查看。 項(xiàng)目展示 本...
閱讀 2439·2019-08-30 15:56
閱讀 1097·2019-08-30 15:55
閱讀 3270·2019-08-30 15:44
閱讀 1005·2019-08-30 10:53
閱讀 1948·2019-08-29 16:33
閱讀 2642·2019-08-29 16:13
閱讀 773·2019-08-29 12:41
閱讀 941·2019-08-26 13:56