1、active-class 是哪個(gè)組件的屬性?嵌套路由怎么定義
(1)、active-class 是 vue-router 模塊的 router-link 組件的屬性 (2)、使用 children 定義嵌套路由
2、怎么定義 vue-router 的動(dòng)態(tài)路由? 怎么獲取傳過來的值
在 router 目錄下的 index.js 文件中,對 path 屬性加上 /:id。
使用 router 對象的 params.id 獲取
3、vue-router 有哪幾種導(dǎo)航鉤子?
三種,
(1)、全局導(dǎo)航鉤子
router.beforeEach(to, from, next),
router.beforeResolve(to, from, next),
router.afterEach(to, from ,next)
(2)、組件內(nèi)鉤子
beforeRouteEnter, beforeRouteUpdate, beforeRouteLeave
(3)、單獨(dú)路由獨(dú)享組件
beforeEnter
4、v-model 是什么?怎么使用? vue中標(biāo)簽怎么綁定事件
v-model 可以實(shí)現(xiàn)雙向綁定,
綁定事件:<input @click="doLog" />
5、axios 是什么?怎么使用?描述使用它實(shí)現(xiàn)登錄功能的流程
axios 是請求后臺資源的模塊。 npm i axios -S
如果發(fā)送的是跨域請求,需在配置文件中 config/index.js 進(jìn)行配置
6、vuex 是什么?怎么使用?哪種功能場景使用它
vuex 是專門為 vue 開發(fā)的數(shù)據(jù)狀態(tài)管理模式。組件之間數(shù)據(jù)狀態(tài)共享
使用場景:音樂播放、登錄狀態(tài)、購物車
// 新建 store.js
import vue from 'vue'
import vuex form 'vuex'
vue.use(vuex)
export default new vuex.store({
//...code
})
//main.js
import store from './store'
...
7、mvvm 框架是什么?它和其他框架(jquery) 的區(qū)別是什么?哪些場景適合
mvvm 是 model + view + viewmodel 框架,通過 viewmodel 連接數(shù)據(jù)模型model 和 view
區(qū)別:vue 是數(shù)據(jù)驅(qū)動(dòng),通過數(shù)據(jù)來顯示視圖層而不是節(jié)點(diǎn)操用
場景:數(shù)據(jù)操作比較多的場景,更加快捷
8、自定義指令(v-check, v-focus) 的方法有哪些? 它有哪些鉤子函數(shù)? 還有哪些鉤子函數(shù)參數(shù)
全局定義指令:在 vue 對象的 directive 方法里面有兩個(gè)參數(shù), 一個(gè)是指令名稱, 另一個(gè)是函數(shù)。
組件內(nèi)定義指令:directives
鉤子函數(shù): bind(綁定事件出發(fā))、inserted(節(jié)點(diǎn)插入時(shí)候觸發(fā))、update(組件內(nèi)相關(guān)更新)
鉤子函數(shù)參數(shù): el、binding
9、說出至少 4 種 vue 當(dāng)中的指令和它的用法
v-if(判斷是否隱藏)、v-for(把數(shù)據(jù)遍歷出來)、v-bind(綁定屬性)、v-model(實(shí)現(xiàn)雙向綁定)
11、vue 的雙向綁定的原理是什么
參考地址 https://ustbhuangyi.github.io/vue-analysis/reactive/summary.html
vue.js 是采用數(shù)據(jù)劫持結(jié)合發(fā)布者-訂閱者模式的方式,通過Object.defineProperty()來劫持各個(gè)屬性的setter,getter,在數(shù)據(jù)變動(dòng)時(shí)發(fā)布消息給訂閱者,觸發(fā)相應(yīng)的監(jiān)聽回調(diào)。
具體步驟:
第一步:需要 observe 的數(shù)據(jù)對象進(jìn)行遞歸遍歷,包括子屬性對象的屬性,都加上 setter 和 getter 這樣的話,給這個(gè)對象的某個(gè)值賦值,就會觸發(fā)setter,那么就能監(jiān)聽到了數(shù)據(jù)變化
第二步:compile解析模板指令,將模板中的變量替換成數(shù)據(jù),然后初始化渲染頁面視圖,并將每個(gè)指令對應(yīng)的節(jié)點(diǎn)綁定更新函數(shù),添加監(jiān)聽數(shù)據(jù)的訂閱者,一旦數(shù)據(jù)有變動(dòng),收到通知,更新視圖
第三步:Watcher訂閱者是Observer和Compile之間通信的橋梁,主要做的事情是:
1、在自身實(shí)例化時(shí)往屬性訂閱器(dep)里面添加自己
2、自身必須有一個(gè)update()方法
3、待屬性變動(dòng)dep.notice()通知時(shí),能調(diào)用自身的 update() 方法,并觸發(fā)Compile中綁定的回調(diào),則功成身退。
第四步:MVVM作為數(shù)據(jù)綁定的入口,整合Observer、Compile和Watcher三者,通過Observer來監(jiān)聽自己的model數(shù)據(jù)變化,通過Compile來解析編譯模板指令,最終利用Watcher搭起Observer和Compile之間的通信橋梁,達(dá)到數(shù)據(jù)變化 -> 視圖更新;視圖交互變化(input) -> 數(shù)據(jù)model變更的雙向綁定效果。
12、請?jiān)敿?xì)說下你對vue生命周期的理解
總共分為8個(gè)階段創(chuàng)建前/后,載入前/后,更新前/后,銷毀前/后。
創(chuàng)建前/后
在beforeCreated階段,vue實(shí)例的掛載元素$el和數(shù)據(jù)對象data都為undefined,還未初始化。
在created階段,vue實(shí)例的數(shù)據(jù)對象data有了,$el還沒有。
載入前/后
在beforeMount階段,vue實(shí)例的$el和data都初始化了,但還是掛載之前為虛擬的dom節(jié)點(diǎn),data.message還未替換。
在mounted階段,vue實(shí)例掛載完成,data.message成功渲染。
更新前/后
當(dāng)data變化時(shí),會觸發(fā)beforeUpdate和updated方法。
銷毀前/后
在執(zhí)行destroy方法后,對data的改變不會再觸發(fā)周期函數(shù),說明此時(shí)vue實(shí)例已經(jīng)解除了事件監(jiān)聽以及和dom的綁定,但是dom結(jié)構(gòu)依然存在
1、vue的工作原理
參考網(wǎng)站 https://juejin.im/post/5af8eb55f265da0b814ba766
vue的數(shù)據(jù)雙向綁定是:數(shù)據(jù)劫持+發(fā)布訂閱模式實(shí)現(xiàn)的
5、MVVM的理解
參考網(wǎng)站 https://www.cnblogs.com/iovec/p/7840228.html
MVVM 是一種軟件架構(gòu)模式,他的核心就是viewmodel(視圖數(shù)據(jù)層);
V:view 視圖層 ;前端主要由 HTML 和 CSS 來構(gòu)建,為了更方便地展現(xiàn) ViewModel 或者 Model 層的數(shù)據(jù)
M:model 數(shù)據(jù)模型層 ;泛指后端進(jìn)行的各種業(yè)務(wù)邏輯處理和數(shù)據(jù)操控,主要圍繞數(shù)據(jù)庫系統(tǒng)展開
vm:視圖數(shù)據(jù)層 ;前端開發(fā)者對從后端獲取的 Model 數(shù)據(jù)進(jìn)行轉(zhuǎn)換處理,做二次封裝,以生成符合 View 層使用預(yù)期的視圖數(shù)據(jù)模型(view與model直接的通信橋梁);注意vm封裝的數(shù)據(jù)模型包括視圖狀態(tài)和行為兩部分,model層返回的數(shù)據(jù)模型只有狀態(tài),這里展示什么那里展示什么,而視圖行為包括:頁面加載進(jìn)來展示什么,點(diǎn)擊這個(gè)按鈕會發(fā)生什么,滾動(dòng)下會發(fā)生什么等都是數(shù)據(jù)視圖行為(交互),視圖狀態(tài)和行為都封裝在viewmodel里面,就使得vm可以完整的去描述view層;
5.1、Vue中給data中的對象屬性添加一個(gè)新的屬性時(shí)會發(fā)生什么,如何解決?
如果這個(gè)新的屬性沒有再data里面初始化,新增的時(shí)候是不是被渲染再視圖中的,解決方法1,再data中初始化定義,2,用vueapi set(this.obj, 'b', 'obj.b')
5.2、Vue中如何監(jiān)控某個(gè)屬性值的變化?
computed 去監(jiān)聽 ,或者watch 監(jiān)聽