若是能幫到你,點個贊吧,務必熟知的vuejs面試題「務必收藏」
一、active-class 是哪一個組件的屬性?嵌套路由怎麼定義vue
(1)、active-class 是 vue-router 模塊的 router-link 組件的屬性
(2)、使用 children 定義嵌套路由jquery
二、怎麼定義 vue-router 的動態路由? 怎麼獲取傳過來的值ios
在 router 目錄下的 index.js 文件中,對 path 屬性加上 /:id。面試
使用 router 對象的 params.id 獲取ajax
三、vue-router 有哪幾種導航鉤子?vue-router
三種,vuex
(1)、全局導航鉤子npm
router.beforeEach(to, from, next), axios
router.beforeResolve(to, from, next), segmentfault
router.afterEach(to, from ,next)
(2)、組件內鉤子
beforeRouteEnter, beforeRouteUpdate, beforeRouteLeave
(3)、單獨路由獨享組件
beforeEnter
四、v-model 是什麼?怎麼使用? vue中標籤怎麼綁定事件
v-model 能夠實現雙向綁定,
綁定事件:<input @click="rdhub.cn" />
五、axios 是什麼?怎麼使用?描述使用它實現登陸功能的流程
axios 是請求後臺資源的模塊。 npm i axios -S
若是發送的是跨域請求,需在配置文件中 config/index.js 進行配置
六、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' ...
七、mvvm 框架是什麼?它和其餘框架(jquery) 的區別是什麼?哪些場景適合
mvvm 是 model + view + viewmodel 框架,經過 viewmodel 鏈接數據模型model 和 view
區別:vue 是數據驅動,經過數據來顯示視圖層而不是節點操用
場景:數據操做比較多的場景,更加快捷
八、自定義指令(v-check, v-focus) 的方法有哪些? 它有哪些鉤子函數? 還有哪些鉤子函數參數
全局定義指令:在 vue 對象的 directive 方法裏面有兩個參數, 一個是指令名稱, 另外一個是函數。
組件內定義指令:directives
鉤子函數: bind(綁定事件出發)、inserted(節點插入時候觸發)、update(組件內相關更新)
鉤子函數參數: el、binding
九、說出至少 4 種 vue 當中的指令和它的用法
v-if(判斷是否隱藏)、v-for(把數據遍歷出來)、v-bind(綁定屬性)、v-model(實現雙向綁定)
十、vue-router 是什麼?它有哪些組件
vue-router 是 vue 的路由插件,
組件:router-link router-view
十一、vue 的雙向綁定的原理是什麼
vue.js 是採用數據劫持結合發佈者-訂閱者模式的方式,經過Object.defineProperty()來劫持各個屬性的setter,getter,在數據變更時發佈消息給訂閱者,觸發相應的監聽回調。
具體步驟:
第一步:須要 observe 的數據對象進行遞歸遍歷,包括子屬性對象的屬性,都加上 setter 和 getter
這樣的話,給這個對象的某個值賦值,就會觸發setter,那麼就能監聽到了數據變化
第二步:compile解析模板指令,將模板中的變量替換成數據,而後初始化渲染頁面視圖,並將每一個指令對應的節點綁定更新函數,添加監聽數據的訂閱者,一旦數據有變更,收到通知,更新視圖
第三步:Watcher訂閱者是Observer和Compile之間通訊的橋樑,主要作的事情是:
一、在自身實例化時往屬性訂閱器(dep)裏面添加本身
二、自身必須有一個update()方法
三、待屬性變更dep.notice()通知時,能調用自身的 update() 方法,並觸發Compile中綁定的回調,則功成身退。
第四步:MVVM做爲數據綁定的入口,整合Observer、Compile和Watcher三者,經過Observer來監聽本身的model數據變化,經過Compile來解析編譯模板指令,最終利用Watcher搭起Observer和Compile之間的通訊橋樑,達到數據變化 -> 視圖更新;視圖交互變化(input) -> 數據model變動的雙向綁定效果。
十二、請詳細說下你對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結構依然存在
一、有哪幾種屬性
有 5 種,分別是 state、getter、mutation、action、module
二、vuex 的 store 特性是什麼
(1) vuex 就是一個倉庫,倉庫裏放了不少對象。其中 state 就是數據源存放地,對應於通常 vue 對象裏面的 data
(2) state 裏面存放的數據是響應式的,vue 組件從 store 讀取數據,如果 store 中的數據發生改變,依賴這相數據的組件也會發生更新
(3) 它經過 mapState 把全局的 state 和 getters 映射到當前組件的 computed 計算屬性
三、 vuex 的 getter 特性是什麼
(1) getter 能夠對 state 進行計算操做,它就是 store 的計算屬性
(2) 雖然在組件內也能夠作計算屬性,可是 getters 能夠在多給件之間複用
(3) 若是一個狀態只在一個組件內使用,是能夠不用 getters
四、vuex 的 mutation 特性是什麼
action 相似於 muation, 不一樣在於:action 提交的是 mutation,而不是直接變動狀態
action 能夠包含任意異步操做
五、vue 中 ajax 請求代碼應該寫在組件的methods中仍是vuex 的action中
若是請求來的數據不是要被其餘組件公用,僅僅在請求的組件內使用,就不須要放入 vuex 的 state 裏
若是被其餘地方複用,請將請求放入 action 裏,方便複用,幷包裝成 promise 返回
五、不用 vuex 會帶來什麼問題
可維護性會降低,你要修改數據,你得維護3個地方
可讀性降低,由於一個組件裏的數據,你根本就看不出來是從哪裏來的
增長耦合,大量的上傳派發,會讓耦合性大大的增長,原本Vue用Component就是爲了減小耦合,如今這麼用,和組件化的初衷相背
一、什麼是 vue 生命週期
vue 實例從建立到銷燬的過程就是生命週期。
也就是從開始建立、初始化數據、編譯模板、掛在 dom -> 渲染、更新 -> 渲染、寫在等一系列過程
二、vue生命週期的做用是什麼
生命週期中有多個事件鉤子,讓咱們在控制整個 vue 實例的過程時更容易造成好的邏輯
三、vue生命週期總共有幾個階段
8個階段:建立前/後、載入前/後、更新前/後、銷燬前/後
四、第一次頁面加載會觸發哪幾個鉤子
第一次加載會觸發 beforeCreate、created、beforeMount、mounted
五、DOM 渲染在哪一個週期中就已經完成
mounted
六、簡述每一個週期具體適合哪些場景
生命週期鉤子的一些使用方法:
beforecreate : 能夠在這加個loading事件,在加載實例時觸發
created : 初始化完成時的事件寫在這裏,如在這結束loading事件,異步請求也適宜在這裏調用
mounted : 掛載元素,獲取到DOM節點 updated : 若是對數據統一處理,在這裏寫上相應函數
beforeDestroy : 能夠作一個確認中止事件的確認框 nextTick : 更新數據後當即操做dom
![image.png | left | 300x390]
來源:https://segmentfault.com/a/1190000016770732