【vuejs面試題】務必熟知的vuejs面試題
vuejs 基礎必備
1、active-class 是哪個元件的屬性?巢狀路由怎麼定義
(1)、active-class 是 vue-router 模組的 router-link 元件的屬性
(2)、使用 children 定義巢狀路由
2、怎麼定義 vue-router 的動態路由? 怎麼獲取傳過來的值
在 router 目錄下的 index.js 檔案中,對 path 屬性加上 /:id。
使用 router 物件的 params.id 獲取
3、vue-router 有哪幾種導航鉤子?
三種,
(1)、全域性導航鉤子
router.beforeEach(to, from, next),
router.beforeResolve(to, from, next),
router.afterEach(to, from ,next)
(2)、元件內鉤子
beforeRouteEnter, beforeRouteUpdate, beforeRouteLeave
(3)、單獨路由獨享元件
beforeEnter
4、v-model 是什麼?怎麼使用? vue中標籤怎麼繫結事件
v-model 可以實現雙向繫結,
繫結事件:<input @click="rdhub.cn" />
5、axios 是什麼?怎麼使用?描述使用它實現登入功能的流程
axios 是請求後臺資源的模組。 npm i axios -S
如果傳送的是跨域請求,需在配置檔案中 config/index.js 進行配置
6、vuex 是什麼?怎麼使用?哪種功能場景使用它
vuex 是專門為 vue 開發的資料狀態管理模式。元件之間資料狀態共享
使用場景:音樂播放、登入狀態、購物車
// 新建 store.js import vue from 'vue' import vuex form 'vuex' vue.use(vuex) export default new vuex.store({ //...rdhub.cn }) //main.js import store from './store' ...
7、mvvm 框架是什麼?它和其他框架(jquery) 的區別是什麼?哪些場景適合
mvvm 是 model + view + viewmodel 框架,通過 viewmodel 連線資料模型model 和 view
區別:vue 是資料驅動,通過資料來顯示檢視層而不是節點操用
場景:資料操作比較多的場景,更加快捷
8、自定義指令(v-check, v-focus) 的方法有哪些? 它有哪些鉤子函式? 還有哪些鉤子函式引數
全域性定義指令:在 vue 物件的 directive 方法裡面有兩個引數, 一個是指令名稱, 另一個是函式。
元件內定義指令:directives
鉤子函式: bind(繫結事件出發)、inserted(節點插入時候觸發)、update(元件內相關更新)
鉤子函式引數: el、binding
9、說出至少 4 種 vue 當中的指令和它的用法
v-if(判斷是否隱藏)、v-for(把資料遍歷出來)、v-bind(繫結屬性)、v-model(實現雙向繫結)
10、vue-router 是什麼?它有哪些元件
vue-router 是 vue 的路由外掛,
元件:router-link router-view
11、vue 的雙向繫結的原理是什麼
vue.js 是採用資料劫持結合釋出者-訂閱者模式的方式,通過Object.defineProperty()來劫持各個屬性的setter,getter,在資料變動時釋出訊息給訂閱者,觸發相應的監聽回撥。
具體步驟:
第一步:需要 observe 的資料物件進行遞迴遍歷,包括子屬性物件的屬性,都加上 setter 和 getter
這樣的話,給這個物件的某個值賦值,就會觸發setter,那麼就能監聽到了資料變化
第二步:compile解析模板指令,將模板中的變數替換成資料,然後初始化渲染頁面檢視,並將每個指令對應的節點繫結更新函式,新增監聽資料的訂閱者,一旦資料有變動,收到通知,更新檢視
第三步:Watcher訂閱者是Observer和Compile之間通訊的橋樑,主要做的事情是:
1、在自身例項化時往屬性訂閱器(dep)裡面新增自己
2、自身必須有一個update()方法
3、待屬性變動dep.notice()通知時,能呼叫自身的 update() 方法,並觸發Compile中繫結的回撥,則功成身退。
第四步:MVVM作為資料繫結的入口,整合Observer、Compile和Watcher三者,通過Observer來監聽自己的model資料變化,通過Compile來解析編譯模板指令,最終利用Watcher搭起Observer和Compile之間的通訊橋樑,達到資料變化 -> 檢視更新;檢視互動變化(input) -> 資料model變更的雙向繫結效果。
12、請詳細說下你對vue生命週期的理解
總共分為8個階段建立前/後,載入前/後,更新前/後,銷燬前/後。
建立前/後
在beforeCreated階段,vue例項的掛載元素$el和資料物件data都為undefined,還未初始化。
在created階段,vue例項的資料物件data有了,$el還沒有。
載入前/後
在beforeMount階段,vue例項的$el和data都初始化了,但還是掛載之前為虛擬的dom節點,data.message還未替換。
在mounted階段,vue例項掛載完成,data.message成功渲染。
更新前/後
當data變化時,會觸發beforeUpdate和updated方法。
銷燬前/後
在執行destroy方法後,對data的改變不會再觸發周期函式,說明此時vue例項已經解除了事件監聽以及和dom的繫結,但是dom結構依然存在
vuex 面試題
1、有哪幾種屬性
有 5 種,分別是 state、getter、mutation、action、module
2、vuex 的 store 特性是什麼
(1) vuex 就是一個倉庫,倉庫裡放了很多物件。其中 state 就是資料來源存放地,對應於一般 vue 物件裡面的 data
(2) state 裡面存放的資料是響應式的,vue 元件從 store 讀取資料,若是 store 中的資料發生改變,依賴這相資料的元件也會發生更新
(3) 它通過 mapState 把全域性的 state 和 getters 對映到當前元件的 computed 計算屬性
3、 vuex 的 getter 特性是什麼
(1) getter 可以對 state 進行計算操作,它就是 store 的計算屬性
(2) 雖然在元件內也可以做計算屬性,但是 getters 可以在多給件之間複用
(3) 如果一個狀態只在一個元件內使用,是可以不用 getters
4、vuex 的 mutation 特性是什麼
action 類似於 muation, 不同在於:action 提交的是 mutation,而不是直接變更狀態
action 可以包含任意非同步操作
5、vue 中 ajax 請求程式碼應該寫在元件的methods中還是vuex 的action中
如果請求來的資料不是要被其他元件公用,僅僅在請求的元件內使用,就不需要放入 vuex 的 state 裡
如果被其他地方複用,請將請求放入 action 裡,方便複用,幷包裝成 promise 返回
5、不用 vuex 會帶來什麼問題
可維護性會下降,你要修改資料,你得維護3個地方
可讀性下降,因為一個元件裡的資料,你根本就看不出來是從哪裡來的
增加耦合,大量的上傳派發,會讓耦合性大大的增加,本來Vue用Component就是為了減少耦合,現在這麼用,和元件化的初衷相背
生命週期面試題
1、什麼是 vue 生命週期
vue 例項從建立到銷燬的過程就是生命週期。
也就是從開始建立、初始化資料、編譯模板、掛在 dom -> 渲染、更新 -> 渲染、寫在等一系列過程
2、vue生命週期的作用是什麼
生命週期中有多個事件鉤子,讓我們在控制整個 vue 例項的過程時更容易形成好的邏輯
3、vue生命週期總共有幾個階段
8個階段:建立前/後、載入前/後、更新前/後、銷燬前/後
4、第一次頁面載入會觸發哪幾個鉤子
第一次載入會觸發 beforeCreate、created、beforeMount、mounted
5、DOM 渲染在哪個週期中就已經完成
mounted
6、簡述每個週期具體適合哪些場景
生命週期鉤子的一些使用方法:
beforecreate : 可以在這加個loading事件,在載入例項時觸發
created : 初始化完成時的事件寫在這裡,如在這結束loading事件,非同步請求也適宜在這裡呼叫
mounted : 掛載元素,獲取到DOM節點 updated : 如果對資料統一處理,在這裡寫上相應函式
beforeDestroy : 可以做一個確認停止事件的確認框 nextTick : 更新資料後立即操作dom
![image.png | left | 300x390]
最後:
“相信有很多想學前端的小夥伴,今年年初我花了一個月整理了一份最適合2018年學習的web前端乾貨,從最基礎的HTML+CSS+JS到移動端HTML5等都有整理,送給每一位前端小夥伴,53763,1707這裡是小白聚集地,歡迎初學和進階中的小夥伴。”