被愛的都是祖宗,安全感只有靠自己,太依賴一個人反而會傷的更深?。?!
1、簡述Vue的雙向綁定原理
當(dāng)vue實例化的時候,vue會遍歷data里面的屬性,通過object.definePrototype將它們轉(zhuǎn)化為getter和stter并在內(nèi)部追蹤相關(guān)依賴,在屬性被訪問或者修改的時候進行更新。
雙向綁定v-model是同時實現(xiàn)bind attribute(value)和Listen to event(input)
2、本地存儲有哪些,區(qū)別是什么
sessionStorage和localStorage是h5新增的本地存儲,用來存儲客戶端臨時信息的對象。
前者是持久性存儲,除非手動刪除,否則一直存在。
后者是生命周期為當(dāng)前窗口或標(biāo)簽頁,一旦窗口或標(biāo)簽頁被永久關(guān)閉了,那么所有通過sessionStorage存儲的數(shù)據(jù)也就被清空了。
數(shù)據(jù)存儲的時候需要將JSON對象提供的stringify將其他數(shù)據(jù)類型轉(zhuǎn)化成字符串,再存儲到storage中就可以了.
存:
??? var obj = {"name":"xiaoming","age":"16"}
??? localStorage.setItem("userInfo",JSON.stringify(obj));
?。?/p>
??? var user = JSON.parse(localStorage.getItem("userInfo"))
刪除:
??? localStorage.remove("userInfo);
清空:
??? localStorage.clear();
3、delete和Vue.delete刪除數(shù)組的區(qū)別
delete只是被刪除的元素變成了 empty/undefined 其他的元素的鍵值還是不變。
Vue.delete 直接刪除了數(shù)組對應(yīng)的項,改變了數(shù)組的鍵值。
4.Vue 組件 data 為什么必須是函數(shù)
因為 JS 本身的特性帶來的,如果 data 是一個對象,那么由于對象本身屬于引用類型,當(dāng)我們修改其中的一個屬性時,會影響到所有 Vue 實例的數(shù)據(jù)。如果將 data 作為一個函數(shù)返回一個對象,那么每一個實例的 data 屬性都是獨立的,不會相互影響了。
5、vue組件的優(yōu)缺點
優(yōu)點:輕量級框架、簡單易學(xué)、雙向數(shù)據(jù)綁定、組件化、視圖、數(shù)據(jù)和結(jié)構(gòu)的分離、虛擬DOM、運行速度快。
vue是單頁面應(yīng)用,使頁面局部刷新,不用每次跳轉(zhuǎn)頁面都要請求所有數(shù)據(jù)和dom,這樣大大加快了訪問速度和提升用戶體驗。而且他的第三方ui庫很多節(jié)省開發(fā)時間。
缺點:seo難度比較大,初次加載耗時比較長,適合中小項目開發(fā)
6、vue和小程序的區(qū)別有哪些?
1、生命周期? ? 2、數(shù)據(jù)的綁定? ? 3、顯示和隱藏? ?4、事件的處理? ?5、數(shù)據(jù)的雙向綁定
6、傳參? ? ?7、父子間的通信? ? ??
7、導(dǎo)航守衛(wèi)有哪些?
全局守衛(wèi):beforeEach? afterEach? ?beforeResolve
路由獨享守衛(wèi):beforeEnter
組件內(nèi)守衛(wèi):beforeRouteEnter? ?beforeEnterUpdata? ? ?beforeRouteLeave
8、vue的單項數(shù)據(jù)流的理解
單項數(shù)據(jù)流是指只能從一個方向來修改狀態(tài)。
主要應(yīng)用在父子組件之間的通信。
9、v-if 和 v-show 有什么區(qū)別
v-show 僅僅控制元素的顯示方式,將 display 屬性在 block 和 none 來回切換;而v-if會控制這個 DOM 節(jié)點的存在與否。當(dāng)我們需要經(jīng)常切換某個元素的顯示/隱藏時,使用v-show會更加節(jié)省性能上的開銷;當(dāng)只需要一次顯示或隱藏時,使用v-if更加合理。
10.$route?和?$router?的區(qū)別
$router為 VueRouter 實例,想要導(dǎo)航到不同URL,則使用$router.push方法。
$route為當(dāng)前 router 跳轉(zhuǎn)對象,里面可以獲取 name 、 path 、 query 、 params 等。
11、computed 和 watch 的區(qū)別和運用的場景?
computed: 是計算屬性,依賴其它屬性值,并且 computed 的值有緩存,只有它依賴的屬性值發(fā)生改變,下一次獲取 computed 的值時才會重新計算 computed 的值;?
watch: 更多的是「觀察」的作用,類似于某些數(shù)據(jù)的監(jiān)聽回調(diào) ,每當(dāng)監(jiān)聽的數(shù)據(jù)變化時都會執(zhí)行回調(diào)進行后續(xù)操作;?
運用場景: 當(dāng)我們需要進行數(shù)值計算,并且依賴于其它數(shù)據(jù)時,應(yīng)該使用 computed,因為可以利用 computed 的緩存特性,避免每次獲取值時,都要重新計算; 當(dāng)我們需要在數(shù)據(jù)變化時執(zhí)行異步或開銷較大的操作時,應(yīng)該使用 watch,使用 watch 選項允許我們執(zhí)行異步操作 ( 訪問一個 API ),限制我們執(zhí)行該操作的頻率,并在我們得到最終結(jié)果前,設(shè)置中間狀態(tài)。這些都是計算屬性無法做到的。
12、vuex的理解
Vuex 是一個專為 Vue.js 應(yīng)用程序開發(fā)的狀態(tài)管理模式。它采用集中式存儲管理應(yīng)用的所有組件的狀態(tài)。
當(dāng)項目遇到以下兩種場景時
多個組件依賴于同一狀態(tài)時。
來自不同組件的行為需要變更同一狀態(tài)。
核心屬性是state、getter、mutation、action、module