vue動(dòng)態(tài)路由匹配和路由懶加載多種方法詳解
1,動(dòng)態(tài)路由匹配
前言:
在日常開(kāi)發(fā)中,有一個(gè)商品列表頁(yè)面,點(diǎn)擊每一項(xiàng)可以看到詳情頁(yè)面,且樣式都是一樣的,那樣我們可以封裝一個(gè)詳情頁(yè)面,路由為/detail
不同的數(shù)據(jù) id或唯一標(biāo)識(shí)可以路由寫(xiě)成 /detail/id
,這樣獲取id值就可以請(qǐng)求不同的數(shù)據(jù)并展示了;
所以這種場(chǎng)景使用動(dòng)態(tài)路由匹配是比較方便的;
動(dòng)態(tài)路由匹配模式
你可以在同一個(gè)路由中設(shè)置有多個(gè) 路徑參數(shù),它們會(huì)映射到 $route.params 上的相應(yīng)字段。例如
匹配模式 | 匹配路徑 | $route.params |
---|---|---|
/users/:username | /users/Eula | { username: 'Eula' } |
/users/:username/age/:18 | /users/Eula/age/18 | { username: 'Eula', postId: '18' } |
上面 username對(duì)應(yīng)的是Eula(尤菈) ;age對(duì)應(yīng)的是18;
定義:
首先在路由列表定義一個(gè)動(dòng)態(tài)路由,主要表現(xiàn)為 /:id
動(dòng)態(tài)字段以冒號(hào)
開(kāi)頭;
// 這是動(dòng)態(tài)路由 加上:/:id { path: '/detail/:id', name: 'Detail', meta: { title: '詳情頁(yè)面' }, component: () => import('../views/routers/detail.vue'), },
使用:
在需要進(jìn)行跳轉(zhuǎn)的地方直接在path后面添加參數(shù)即可,如下:
this.$router.replace({path:'/detail/001'})
獲?。?/h3>
獲取傳過(guò)來(lái)的參數(shù)主要有以下幾種方式:
第一種
created() { // 第一種:這里能夠獲取動(dòng)態(tài)路由的傳參 console.log('第一種獲取方式:', this.$route.params); },
打印結(jié)果 :{id: ‘001’}
第二種
使用watch監(jiān)聽(tīng) 路由的變化;
// 第二種:監(jiān)聽(tīng)路由 watch: { $route: { immediate: true, handler(newV, oldV) { console.log('第二種獲取方式:', newV.params); //{id: '001'} }, }, },
第三種
使用路由鉤子函數(shù)beforeRouteEnter
的to參數(shù)也能拿到id值;但想要獲取this需要使用vm;
beforeRouteEnter(to, from, next) { if (to.params.id) { console.log('第三種獲取方式:', to.params); next((vm) => { // 通過(guò) `vm` 訪問(wèn)組件實(shí)例 相當(dāng)于this // 此處可以請(qǐng)求數(shù)據(jù) }); } else { next(); } },
2,路由懶加載
當(dāng)打包構(gòu)建應(yīng)用時(shí),JavaScript 包會(huì)變得非常大,影響頁(yè)面加載。如果我們能把不同路由對(duì)應(yīng)的組件分割成不同的代碼塊,然后當(dāng)路由被訪問(wèn)的時(shí)候才加載對(duì)應(yīng)組件,這樣就會(huì)更加高效。
Vue Router 支持開(kāi)箱即用的動(dòng)態(tài)導(dǎo)入,這意味著你可以用動(dòng)態(tài)導(dǎo)入代替靜態(tài)導(dǎo)入:
其實(shí)就是寫(xiě)成 箭頭函數(shù)
的形式:
// 將 // import UserDetails from './views/UserDetails.vue' // 替換成 const UserDetails = () => import('./views/UserDetails.vue')
還可以把組件按組分塊進(jìn)行打包在一起
使用 webpack有時(shí)候我們想把某個(gè)路由下的所有組件都打包在同個(gè)異步塊 (chunk) 中。只需要使用命名 chunk
,一個(gè)特殊的注釋語(yǔ)法來(lái)提供 chunk name
(需要 Webpack > 2.4):
const UserDetails = () => import(/* webpackChunkName: "group-user" */ './UserDetails.vue') const UserDashboard = () => import(/* webpackChunkName: "group-user" */ './UserDashboard.vue') const UserProfileEdit = () => import(/* webpackChunkName: "group-user" */ './UserProfileEdit.vue')
webpack 會(huì)將任何一個(gè)異步模塊與相同的塊名稱(chēng)組合到相同的異步塊中。
到此這篇關(guān)于vue動(dòng)態(tài)路由匹配和路由懶加載的文章就介紹到這了,更多相關(guān)vue動(dòng)態(tài)路由路由懶加載內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue使用blob下載文件遇到的問(wèn)題小結(jié)
Blob?對(duì)象表示一個(gè)不可變、原始數(shù)據(jù)的類(lèi)文件對(duì)象,這篇文章主要介紹了vue使用blob下載文件遇到的問(wèn)題記錄,需要的朋友可以參考下2024-02-02Vue項(xiàng)目中實(shí)現(xiàn)描點(diǎn)跳轉(zhuǎn)scrollIntoView的案例
這篇文章主要介紹了Vue項(xiàng)目中實(shí)現(xiàn)描點(diǎn)跳轉(zhuǎn)scrollIntoView的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09Vue-Router實(shí)現(xiàn)頁(yè)面正在加載特效方法示例
這篇文章主要給大家介紹了利用Vue-Router實(shí)現(xiàn)頁(yè)面正在加載特效方法示例,文中給出了詳細(xì)的示例代碼,相信對(duì)大家具有一定的參考價(jià)值,有需要的朋友們下面來(lái)一起看看吧。2017-02-02vue2?對(duì)全局自定義指令一次性進(jìn)行注冊(cè)的方法
這篇文章主要介紹了vue2?對(duì)全局自定義指令一次性進(jìn)行注冊(cè),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06vue.js整合vux中的上拉加載下拉刷新實(shí)例教程
這篇文章主要給大家介紹了關(guān)于vue.js整合vux中上拉加載下拉刷新的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01SpringBoot+Vue3實(shí)現(xiàn)文件的上傳和下載功能
上傳文件和下載文件是我們平時(shí)經(jīng)常用到的功能,接下來(lái)就讓我們用SpringBoot,Vue3和ElementPlus組件實(shí)現(xiàn)文件的上傳和下載功能吧,感興趣的朋友跟隨小編一起看看吧2023-01-01