1. vue 組件的生命周期名党?
vue生命周期.png
vue生命周期.jpeg
beforeCreate() { // 這是我們遇到的第一個生命周期函數(shù),表示實(shí)例完全被創(chuàng)建出來之前您单,會執(zhí)行它
// console.log(this.msg)
// this.show()
// 注意: 在 beforeCreate 生命周期函數(shù)執(zhí)行的時候梯投,data 和 methods 中的 數(shù)據(jù)都還沒有沒初始化
},
created() { // 這是遇到的第二個生命周期函數(shù)
// console.log(this.msg)
// this.show()
// 在 created 中稻薇,data 和 methods 都已經(jīng)被初始化好了!
// 如果要調(diào)用 methods 中的方法葵萎,或者操作 data 中的數(shù)據(jù)导犹,最早,只能在 created 中操作
},
beforeMount() { // 這是遇到的第3個生命周期函數(shù)陌宿,表示 模板已經(jīng)在內(nèi)存中編輯完成了锡足,但是尚未把 模板渲染到 頁面中
// console.log(document.getElementById('h3').innerText)
// 在 beforeMount 執(zhí)行的時候,頁面中的元素壳坪,還沒有被真正替換過來舶得,只是之前寫的一些模板字符串
},
mounted() { // 這是遇到的第4個生命周期函數(shù),表示爽蝴,內(nèi)存中的模板沐批,已經(jīng)真實(shí)的掛載到了頁面中,用戶已經(jīng)可以看到渲染好的頁面了
// console.log(document.getElementById('h3').innerText)
// 注意: mounted 是 實(shí)例創(chuàng)建期間的最后一個生命周期函數(shù)蝎亚,當(dāng)執(zhí)行完 mounted 就表示九孩,實(shí)例已經(jīng)被完全創(chuàng)建好了,此時发框,如果沒有其它操作的話躺彬,這個實(shí)例,就靜靜的 躺在我們的內(nèi)存中,一動不動
},
// 接下來的是運(yùn)行中的兩個事件
beforeUpdate() { // 這時候宪拥,表示 我們的界面還沒有被更新【數(shù)據(jù)被更新了嗎仿野? 數(shù)據(jù)肯定被更新了】
/* console.log('界面上元素的內(nèi)容:' + document.getElementById('h3').innerText)
console.log('data 中的 msg 數(shù)據(jù)是:' + this.msg) */
// 得出結(jié)論: 當(dāng)執(zhí)行 beforeUpdate 的時候,頁面中的顯示的數(shù)據(jù)她君,還是舊的脚作,此時 data 數(shù)據(jù)是最新的,頁面尚未和 最新的數(shù)據(jù)保持同步
},
updated() {
console.log('界面上元素的內(nèi)容:' + document.getElementById('h3').innerText)
console.log('data 中的 msg 數(shù)據(jù)是:' + this.msg)
// updated 事件執(zhí)行的時候缔刹,頁面和 data 數(shù)據(jù)已經(jīng)保持同步了球涛,都是最新的
}
2. created 和 mounted 有什么區(qū)別?(掛載完成之后 this.$el 獲取當(dāng)前組件的 dom 元素)
- mounted一般是在html渲染完成后的操作校镐,此時el亿扁,data都已經(jīng)加載完成,一般對dom的操作都寫在mounted中灭翔,例如獲取innerHTML魏烫,初始化echarts的時候辣苏。
- created一般是在html渲染前的操作肝箱,此時el還是undefined,data已經(jīng)存在稀蟋。這里不能對dom進(jìn)行操作
3. keep-alive:keep-alive是Vue提供的一個抽象組件煌张,用來對組件進(jìn)行緩存,從而節(jié)省性能退客,由于是一個抽象組件骏融,所以在v頁面渲染完畢后不會被渲染成一個DOM元素。
當(dāng)組件在keep-alive內(nèi)被切換時組件的activated萌狂、deactivated這兩個生命周期鉤子函數(shù)會被執(zhí)行
4. slot 插槽(就是組件的占位符):slot(匿名插槽档玻,具名插槽)與slot-scope(作用域插槽)
- .單個插槽 -> 匿名插槽
- 具名插槽:
需要多個插槽時,可以利用<slot> 元素的一個特殊的特性:name來定義具名插槽 - 作用域插槽——帶數(shù)據(jù)的插槽
單個插槽和具名插槽中插槽上不綁定數(shù)據(jù)茫藏,所以父組件提供的模板既要包括樣式又要包括數(shù)據(jù)误趴,而作用域插槽是子組件提供數(shù)據(jù),父組件只需要提供一套樣式
5. 組件之間傳值
- 父傳子:通過屬性進(jìn)行傳遞(在父組件標(biāo)簽上綁定自定義屬性名务傲,值是父組件要傳遞的數(shù)據(jù)凉当,在子組件內(nèi)部通過props屬性接收屬性名)
- 子傳父:通過事件派發(fā)(在子組件標(biāo)簽上綁定自定義事件,子組件內(nèi)部通過$emit給該事件推送數(shù)據(jù)售葡,父組件內(nèi)部通過函數(shù)接收)
- 平行組件(事件總線):使用eventbus事件總線看杭,在代碼中創(chuàng)建一個空白的vue實(shí)例,所有事件派發(fā)和監(jiān)聽都在此實(shí)例上進(jìn)行挟伙。
6. 計(jì)算屬性楼雹?主要用一些簡單的計(jì)算。--計(jì)算屬性只有在它的相關(guān)依賴發(fā)生改變時才會重新求值。
7. 計(jì)算屬性和 methods 有什么區(qū)別贮缅?-->總結(jié):computed計(jì)算屬性的緩存原理在我們處理大量數(shù)據(jù)的時候使用可以大大提高效率瓜贾,不必在數(shù)據(jù)沒有發(fā)生改變的時候重新獲取數(shù)據(jù)的值,可直接獲取到結(jié)果携悯,并且只執(zhí)行綁定依賴的方法祭芦。methods里方法在依賴的值改變后,只有設(shè)置觸發(fā)才會重新執(zhí)行methods里相關(guān)的方法憔鬼。
- 計(jì)算屬性方法調(diào)用不用加();methods需要龟劲;
- 執(zhí)行機(jī)制
computed里的方法在初始化執(zhí)行過后,只要任何值有更新轴或,那么所有在computed計(jì)算屬性里和其相關(guān)的值都會更新昌跌。
methods只有在調(diào)用的時候才會執(zhí)行對應(yīng)的方法,不會自動同步數(shù)據(jù)照雁。
computed計(jì)算屬性跟methods在內(nèi)部的函數(shù)寫起來沒有什么區(qū)別蚕愤,只是在調(diào)用的時候不一樣
8. 過濾器?
- 過濾就是一個數(shù)據(jù)經(jīng)過了這個過濾之后出來另一樣?xùn)|西,可以是從中取得你想要的饺蚊,或者給那個數(shù)據(jù)添加點(diǎn)什么裝飾萍诱,那么過濾器則是過濾的工具
- 過濾器怎么串聯(lián)使用
//在雙花括號中
{{ message | capitalize }}
//在 `v-bind` 中
<p v-bind:id="rawId | formatId"></p>
//也可以串聯(lián)多個過濾器
{{ message | filterA | filterB }}
9. vue 中怎么定義組件,組件定義需要注意什么事情污呼?
10. 在 vue 中如何定義一個類似于 element-ui 的組件庫裕坊?
11. vue-router
路由的兩種模式:history,hash
路由傳參:params燕酷,query
params傳參的時候可以在路由配置的時候設(shè)置占位符
query傳參就是標(biāo)準(zhǔn)的url傳參形式
如果我們想刷新頁面之后路由傳遞的參數(shù)還存在就必須使用query傳參或者params傳參的時候設(shè)置路由占位符
路由守衛(wèi)
beforeEach
afterEach
在路由守衛(wèi)里可以做登錄判斷籍凝?元屬性(meta)
12. vuex
*****
單項(xiàng)數(shù)據(jù)流
vuex中的數(shù)據(jù)流向(參照官網(wǎng)給的圖能說明)
vuex中主要的五大模塊(state,getters,actions,mutations,modules)
mapState
mapActions
mapMutations
13. vue 中的 mvvm 是怎么實(shí)現(xiàn)的:
MVVM拆開來即為Model-View-ViewModel,有View苗缩,ViewModel饵蒂,Model三部分組成。View層代表的是視圖酱讶、模版退盯,負(fù)責(zé)將數(shù)據(jù)模型轉(zhuǎn)化為UI展現(xiàn)出來。Model層代表的是模型浴麻、數(shù)據(jù)得问,可以在Model層中定義數(shù)據(jù)修改和操作的業(yè)務(wù)邏輯。ViewModel層連接Model和View软免。
對數(shù)據(jù)(Model)進(jìn)行劫持宫纬,當(dāng)數(shù)據(jù)變動時,數(shù)據(jù)會出發(fā)劫持時綁定的方法膏萧,對視圖進(jìn)行更新漓骚。