面試知識-vue-1

1.v-if和v-show的區別?javascript

1).v-show和v-if都是用來顯示隱藏元素,v-if還有一個v-else配合使用,二者達到的效果都同樣。css

性能方面去有很大的區別:vue

2).v-show:無論條件是真仍是假,第一次渲染的時候都會編譯出來,也就是標籤都會添加到DOM中。以後切換的時候,經過display: none;樣式來顯示隱藏元素。能夠說只是改變css的樣式,幾乎不會影響什麼性能。v-if:在首次渲染的時候,若是條件爲假,什麼也不操做,頁面看成沒有這些元素。當條件爲真的時候,開始局部編譯,動態的向DOM元素裏面添加元素。當條件從真變爲假的時候,開始局部編譯,卸載這些元素,也就是刪除。java

3).性能方面v-if絕對是更消耗性能的,由於v-if在顯示隱藏過程當中有DOM的添加和刪除,v-show就簡單多了,只是操做css。api

4).由於v-show不管如何都會渲染,若是在一些場景下很難出現,那麼使用v-if。若是是一些固定的,條件內容都不怎麼會改變的,頻繁切換的,使用v-show會比較省性能。若是是子組件,每次切換子組件不執行生命週期,使用v-show,若是子組件須要從新執行生命週期,那麼使用v-if才能觸發。瀏覽器

2.Vue生命週期服務器

beforeCreate性能

created字體

beforeMounturl

mounted

beforeUpdate

updated

beforeDestroy

destroyed

--------------------------

beforeCreate

實例組件剛建立,元素DOM和數據都尚未初始化,暫時不知道能在這個週期裏面進行生命操做。

created

數據data已經初始化完成,方法也已經能夠調用,可是DOM爲渲染。在這個週期裏面若是進行請求是能夠改變數據並渲染,因爲DOM未掛載,請求過多或者佔用時間過長會致使頁面線上空白。

beforeMount

DOM未完成掛載,數據也初始化完成,可是數據的雙向綁定仍是顯示{{}},這是由於Vue採用了Virtual DOM(虛擬Dom)技術。先佔住了一個坑。

mounted

數據和DOM都完成掛載,在上一個週期佔位的數據把值給渲染進去。通常請求會放在這個地方,由於這邊請求改變數據以後恰好能渲染。

beforeUpdate

只要是頁面數據改變了都會觸發,數據更新以前,頁面數據仍是原來的數據,當你請求賦值一個數據的時候會執行這個週期,若是沒有數據改變不執行。

updated

只要是頁面數據改變了都會觸發,數據更新完畢,頁面的數據是更新完成的。beforeUpdate和updated要謹慎使用,由於頁面更新數據的時候都會觸發,在這裏操做數據很影響性能和容易死循環。

beforeDestroy

這個週期是在組件銷燬以前執行,在我項目開發中,以爲這個其實有點相似路由鉤子beforeRouterLeave,都是在路由離開的時候執行,只不過beforeDestroy沒法阻止路由跳轉,可是能夠作一些路由離開的時候操做,由於這個週期裏面還可使用data和method。好比一個倒計時組件,若是在路由跳轉的時候沒有清除,這個定時器仍是在的,這時候就能夠在這個裏面清除計時器。

Destroyed

說實在的,我還真的不知道這個週期跟beforeDestroy有什麼區別,我在這個週期裏面調用data的數據和methods的方法都能調用,因此我會以爲跟beforeDestroy是同樣的。

3.vue的路由模式有:三種

Hash: 使用URL的hash值來做爲路由。支持全部瀏覽器。(原理是onhashchange事件,url都會被瀏覽器記錄下來,只能改變#後面的url片斷)

History: 以來HTML5 History API 和服務器配置。參考官網中HTML5 History模式。(根據history api中的pushState,replaceState兩個方法)(經過pushstate把頁面的狀態保存在state對象中,當頁面的url再變回這個url時,能夠經過event.state取到這個state對象,從而能夠對頁面狀態進行還原,這裏的頁面狀態就是頁面字體顏色,其實滾動條的位置,閱讀進度,組件的開關的這些頁面狀態均可以存儲到state的裏面)

Abstract: 支持全部javascript運行模式。若是發現沒有瀏覽器的API,路由會自動強制進入這個模式。

4.