您好,登錄后才能下訂單哦!
這篇文章主要介紹了關(guān)于路由vue-router的vuejs面試題有哪些,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
mvvm即Model-View-ViewModel,mvvm的設(shè)計原理是基于mvc的
MVVM是Model-View-ViewModel的縮寫,Model代表數(shù)據(jù)模型負(fù)責(zé)業(yè)務(wù)邏輯和數(shù)據(jù)封裝,View代表UI組件負(fù)責(zé)界面和顯示,ViewModel監(jiān)聽模型數(shù)據(jù)的改變和控制視圖行為,處理用戶交互,簡單來說就是通過雙向數(shù)據(jù)綁定把View層和Model層連接起來。在MVVM架構(gòu)下,View和Model沒有直接聯(lián)系,而是通過ViewModel進(jìn)行交互,我們只關(guān)注業(yè)務(wù)邏輯,不需要手動操作DOM,不需要關(guān)注View和Model的同步工作
Vue Router 是 Vue.js 官方的路由管理器。它和 Vue.js 的核心深度集成,讓構(gòu)建單頁面應(yīng)用變得易如反掌。
<router-link>
和<router-view>
和<keep-alive>
active-class是router-link終端屬性,用來做選中樣式的切換,當(dāng)router-link標(biāo)簽被點擊時將會應(yīng)用這個樣式
動態(tài)路由的創(chuàng)建,主要是使用path屬性過程中,使用動態(tài)路徑參數(shù),以冒號開頭,如下:
{ path: '/details/:id' name: 'Details' components: Details }
訪問details目錄下的所有文件,如果details/a,details/b等,都會映射到Details組件上。
當(dāng)匹配到/details下的路由時,參數(shù)值會被設(shè)置到this.$route.params下,所以通過這個屬性可以獲取動態(tài)參數(shù)
console.log(this.$route.params.id)
全局前置守衛(wèi)
const router = new VueRouter({}) router.beforeEach((to, from, next) = { // to do somethings })
to:Route,代表要進(jìn)入的目標(biāo),它是一個路由對象。
from:Route,代表當(dāng)前正要離開的路由,也是一個路由對象
next:Function,必須需要調(diào)用的方法,具體的執(zhí)行效果則依賴next方法調(diào)用的參數(shù)
next():進(jìn)入管道中的下一個鉤子,如果全部的鉤子執(zhí)行完了,則導(dǎo)航的狀態(tài)就是comfirmed(確認(rèn)的)
next(false):終端當(dāng)前的導(dǎo)航。如瀏覽器URL改變,那么URL會充值到from路由對應(yīng)的地址。
next(’/’)||next({path:’/’}):跳轉(zhuǎn)到一個不同的地址。當(dāng)前導(dǎo)航終端,執(zhí)行新的導(dǎo)航。
全局后置鉤子
router.afterEach((to, from) = { // to do somethings })
后置鉤子并沒有next函數(shù),也不會改變導(dǎo)航本身。
路由獨享鉤子
beforEnter
const router = new VueRouter({ routes: [ { path: '/home', component: Home, beforeEnter: (to, from, next) = { // to do somethings // 參數(shù)與全局守衛(wèi)參數(shù)一樣 } } ] })
組件內(nèi)導(dǎo)航鉤子
const Home = { template: `<div</div`, beforeRouteEnter(to, from, next){ // 在渲染該組件的對應(yīng)路由被 confirm 前調(diào)用 // 不能獲取組件實例 ‘this’,因為當(dāng)守衛(wèi)執(zhí)行前,組件實例還沒被創(chuàng)建 }, beforeRouteUpdate(to, from, next){ // 在當(dāng)前路由改變,但是該組件被復(fù)用時調(diào)用 // 例:對于一個動態(tài)參數(shù)的路徑 /home/:id,在/home/1 和 /home/2 之間跳轉(zhuǎn)的時候 // 由于會渲染同樣的 Home 組件,因此組件實例會被復(fù)用,而這個鉤子就會在這個情況下被調(diào)用。 // 可以訪問組件實例 'this' }, beforeRouteLeave(to, from, next){ // 導(dǎo)航離開該組件的對應(yīng)路由時調(diào)用 // 可以訪問組件實例 'this' } }
beforeRouterEnter不能訪問this,因為守衛(wèi)在導(dǎo)航確認(rèn)前被調(diào)用,因此新組建還沒有被創(chuàng)建,可以通過傳一個回調(diào)給 next 來訪問組件實例。在導(dǎo)航被確認(rèn)的時候執(zhí)行回調(diào),并把實例作為回調(diào)的方法參數(shù)。
const Home = { template: `<div</div`, beforeRouteEnter(to, from, next){ next( vm = { // 通過 'vm' 訪問組件實例 }) } }
router為VueRouter的實例,是一個全局路由對象,包含了路由跳轉(zhuǎn)的方法、鉤子函數(shù)等。
route 是路由信息對象||跳轉(zhuǎn)的路由對象,每一個路由都會有一個route對象,是一個局部對象,包含path,params,hash,query,fullPath,matched,name等路由信息參數(shù)。
用watch 檢測
// 監(jiān)聽當(dāng)前路由發(fā)生變化的時候執(zhí)行 watch: { $route(to, from){ console.log(to.path) // 對路由變化做出響應(yīng) } }
組件內(nèi)導(dǎo)航鉤子函數(shù)
beforeRouteUpdate(to, from, next){ // to do somethings }
Params
只能使用name,不能使用path
參數(shù)不會顯示在路徑上
瀏覽器強制刷新參數(shù)會被清空,
// 傳遞參數(shù) this.$router.push({ name: Home, params: { number: 1 , code: '999' } }) // 接收參數(shù) const p = this.$route.params
Query:
參數(shù)會顯示在路徑上,刷新不會被清空
name 可以使用path路徑
// 傳遞參數(shù) this.$router.push({ name: Home, query: { number: 1 , code: '999' } }) // 接收參數(shù) const q = this.$route.query
hash
原理是onhashchage事件,可以在window對象上監(jiān)聽這個事件
window.onhashchange = function(event){ console.log(event.oldURL, event.newURL) let hash = location.hash.slice(1) }
history
利用了HTML5 History Interface 中新增的pushState()和replaceState()方法。
需要后臺配置支持。如果刷新時,服務(wù)器沒有響應(yīng)響應(yīng)的資源,會刷出404,
把不同路由對應(yīng)的組件分割成不同的代碼塊,然后當(dāng)路由被訪問時才加載對應(yīng)的組件即為路由的懶加載,可以加快項目的加載速度,提高效率
const router = new VueRouter({ routes: [ { path: '/home', name: 'Home', component:() = import('../views/home') } ] })
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“關(guān)于路由vue-router的vuejs面試題有哪些”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。