VUE

vue生命周期

vue數(shù)據(jù)雙向綁定

vue虛擬dom?

computed和watch運(yùn)行機(jī)制1

computed和watch運(yùn)行機(jī)制2

vue30道面試題

VUE面試點(diǎn):

需要熟悉:生命周期,鉤子函數(shù),鉤子函數(shù)參數(shù)

單文件開(kāi)發(fā)(需要使用webpack,項(xiàng)目暫時(shí)無(wú)法使用? 例子:http://div.io/topic/1701)


v-if 對(duì)條件塊會(huì)創(chuàng)建、銷毀、創(chuàng)建

v-show 一開(kāi)始就會(huì)創(chuàng)建組件,根據(jù)css屬性display來(lái)顯示、隱藏條件塊

prop

單向數(shù)據(jù)流? --? 當(dāng)父組件更新時(shí),子組件中的所有prop都會(huì)更新會(huì)最新的值,所以不應(yīng)該在子組件中更改prop。子組件通過(guò)$emit 自定義事件通向父組件發(fā)通知。? ??

子組件中可以用data屬性存儲(chǔ)prop,也可以使用計(jì)算屬性來(lái)轉(zhuǎn)換prop。

computed和watch運(yùn)行機(jī)制:

https://segmentfault.com/a/1190000016368913

https://juejin.im/post/5d59f2a451882549be53b170

watch允許異步操作

為什么vue不能給數(shù)組元素直接賦值呢?

vue的雙向綁定是通過(guò)object.defineProperty給對(duì)象添加setter/getter方法實(shí)現(xiàn)的。object.defineProperty是針對(duì)已有項(xiàng)的設(shè)置,數(shù)組中新加的項(xiàng)是不會(huì)被設(shè)置的,也不會(huì)觸發(fā)響應(yīng)。data中的屬性是預(yù)先定義好的。

動(dòng)態(tài)添加的數(shù)組項(xiàng)不能被劫持而產(chǎn)生響應(yīng),給數(shù)組的每一項(xiàng)做劫持,性能低且笨拙。

vue生命周期


vue生命周期

keep-alive的了解?

https://cn.vuejs.org/v2/api/#keep-alive


組件中的data為什么是一個(gè)函數(shù)?而不是對(duì)象?

組件是復(fù)用的,并且js里對(duì)象是引用關(guān)系,如果組件data是對(duì)象,作用域就沒(méi)隔離,子組件中的data屬性值會(huì)相互影響。

如果組件data是函數(shù),每個(gè)組件實(shí)例都返回一份對(duì)象的獨(dú)立拷貝,組件實(shí)例間的data屬性就不會(huì)相互影響。
而new vue的實(shí)例只有一份,是不會(huì)被復(fù)用的,所以不存在引用對(duì)象的問(wèn)題。

v-model的原理?

v-mode本質(zhì)上是語(yǔ)法糖,它為不同的輸入元素使用不同的屬性并且拋出不同的事情。

text和textarea使用value屬性和input事件

checkout和radio使用checked屬性和change事件

select將value作為prop,并將change作為事件


vue組件間通信方式?

props和$emit 父子間通信。

ref和$parent/$children

eventbus($emit和$on)--一個(gè)空vue實(shí)例,用它來(lái)觸發(fā)事件和監(jiān)聽(tīng)事件,父子、兄弟、隔代組件間都可以通信。

$attrs和$listeners--

provide和inject--

vuex

你使用過(guò)vuex嗎?

vue-router的路由模式有幾種?


能說(shuō)下 vue-router 中常用的 hash 和 history 路由模式實(shí)現(xiàn)原理嗎?

1.hash模式實(shí)現(xiàn)原理--hash路由模式實(shí)現(xiàn)主要基于以下幾個(gè)特性

早期前端路由是由?location.hash 實(shí)現(xiàn)的。?location.hash 的值就是URL#后面的內(nèi)容,#是用來(lái)指導(dǎo)瀏覽器動(dòng)作的,對(duì)服務(wù)端無(wú)用,發(fā)送的請(qǐng)求中不帶有#。只改變#后面的內(nèi)容,不會(huì)刷新頁(yè)面,頁(yè)面會(huì)滾動(dòng)到#指定的錨點(diǎn)位置。

hash每次改變,會(huì)在瀏覽器的訪問(wèn)歷史中增加一個(gè)記錄(IE6、7不支持),所以可以通過(guò)瀏覽器前進(jìn)、回退按鈕控制hash的切換。

可以通過(guò)a標(biāo)簽,設(shè)置href屬性,用戶點(diǎn)擊標(biāo)簽后hash會(huì)發(fā)生變化。或者使用javascript對(duì)location.hash復(fù)制來(lái)URL hash。

html5事件onhashchange 監(jiān)聽(tīng)hash的變化,從而對(duì)頁(yè)面進(jìn)行跳轉(zhuǎn)(渲染)。

2.history模式實(shí)現(xiàn)的原理--

html5提供了history api來(lái)實(shí)現(xiàn)URL變化。history.pushState和history.replaceState,這兩個(gè)api在不刷新的情況下,操作瀏覽器的歷史記錄。history.pushState是新增一條歷史記錄,history.replaceState是替換當(dāng)前的歷史記錄。

window.history.pushState(null, null, path);window.history.replaceState(null, null, path);

history路由模式實(shí)現(xiàn)主要基于以下幾個(gè)特性

pushState和replaceState兩個(gè)api來(lái)操作實(shí)現(xiàn)url變化。

使用popstate監(jiān)聽(tīng)url變化,從而對(duì)頁(yè)面進(jìn)行跳轉(zhuǎn)(渲染)

pushState和replaceState不會(huì)觸發(fā)popstate,需要手動(dòng)觸發(fā)頁(yè)面跳轉(zhuǎn)(渲染)

什么是MVVM?

https://juejin.im/post/5d421bcf6fb9a06af23853f1



vue怎么監(jiān)聽(tīng)對(duì)象和數(shù)組的?

-- object.defineProperty只能劫持屬性。不能劫持整個(gè)對(duì)象和數(shù)組,vue通過(guò)遍歷數(shù)組和遞歸遍歷對(duì)象,利用object.defineProperty對(duì)數(shù)組和獨(dú)享實(shí)現(xiàn)數(shù)據(jù)監(jiān)聽(tīng)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容