Q:什么是mvvm
mvvm是一種設(shè)計思想
m->model 數(shù)據(jù)層
v->view 視圖層
vm->viewmodel 控制層,自動更新,渲染視圖,雙向綁定
優(yōu)點:實現(xiàn)了修改數(shù)據(jù)和模板自動渲染,解放了開發(fā)者,只需要關(guān)注View和Model,不用手動的操作DOM,效率和性能提高,低耦合度,獨立開發(fā),可復(fù)用性高
Q:mvvm和mvc的區(qū)別
mvvm是MVC 演化而來的
其中 用 vm 替換了 c
c也是控制層,是單向循環(huán)的,v-c-m-v 手動渲染,視圖渲染在 model層
mvvm控制層是vm,實現(xiàn)數(shù)據(jù)雙向綁定,同步渲染視圖
Q:vue的優(yōu)點是什么(mvvm的優(yōu)點)
- 低耦合
視圖(view)可以獨立于model變化和修改,一個viewmodel 可以綁定到不同的view上,當view變化的時候model可以不變,當model變化的時候,view也可以不變 - 可重用性
你可以幫一些視圖邏輯放在viewModel里面,讓很多view共用 - 獨立開發(fā)
專注于view 和model 層
Q:Vue生命周期
- beforeCreate / created
- beforeMount / mounted
- beforeUpdate / updated
- beforeDestroy /destoryed
- activated
- deactivated
- errorcaptrued
Q:組件之間的通信
- 父組件-> 子組件 props
- 子組件-> 父組件
on(event)
Q:路由之間的跳轉(zhuǎn)
- 聲明式
標簽跳轉(zhuǎn)
<router-link to=''> - 編程式
js跳轉(zhuǎn)
this.$router.push/replace
懶加載(按需加載路由)
const app = ()=>import('./app.vue')
之前的版本使用的webpack 中提供的require.ensure()來實現(xiàn)
const home = resolve=>require(['./home'], resolve)
Q:vuex是什么?哪些場景使用它
vuex是vue的狀態(tài)管理器,作為vue的一個插件
當有數(shù)據(jù)需要大量交互,或者大多組件需要共享時
Q:vue-router的導航鉤子
- 全局的
router.beforeEach
router.beforeResolve
router.afterEach
-組件中
beforeRouteLeave
beforeRouteUpdate
beforeRouterEnter
-路由中
-beforeEnter
Q:vue的雙向綁定原理
采用數(shù)據(jù)劫持結(jié)合發(fā)布者-訂閱者模式,通過Object.defineProperty()來劫持給個屬性的setter和getter,在數(shù)據(jù)變化時,向訂閱者發(fā)布消息,觸發(fā)相應(yīng)的回調(diào)函數(shù)更新
Q:Vuex如何區(qū)分state是外部直接修改,還是通過mutation方法修改的
Vuex 中修改state的唯一方式是 操作 muations,其底層通過執(zhí)行 this._withCommit(fn)設(shè)置—_committing標志變量為true,才能修改state
所有只要查看 _committing的標志變量,就可以知道 state是否是合法的方式改變的