vue3.0?router路由跳轉(zhuǎn)傳參問題(router.push)
vue3 router路由跳轉(zhuǎn)傳參
vue3.0取消了2.0部分api,所以路由跳轉(zhuǎn)傳值方式有所不同。
這里主要講編程式導(dǎo)航,也就是router.push(location, onComplete?, onAbort?)
vue3.0新增API:useRouter和useRoute
路由跳轉(zhuǎn)
1.首先在需要跳轉(zhuǎn)的頁面引入API—useRouter
import { useRouter } from 'vue-router'
2.在跳轉(zhuǎn)頁面定義router變量
const router = useRouter()
3.用router.push跳轉(zhuǎn)頁面
// 字符串 router.push('home') // 對(duì)象 router.push({ path: 'home' }) // 命名的路由 router.push({ name: 'user', params: { userId: '123' }}) // 帶查詢參數(shù),變成 /register?userId=123 router.push({ path: 'register', query: { userId: '123' }})
4.如果有參數(shù)的話,在接收頁面引入API–useRoute
import { useRoute } from 'vue-router'
5.在接收頁面定義變量route,獲取傳過來的變量
//query let userId=route.query.userId; //params let userId=route.params.userId;
頁面?zhèn)鲄⑿枰⒁獾膯栴}
1.如果提供了path,params會(huì)被忽略,但query沒有這種情況,此時(shí)需要提供路由的name或手寫完整的帶有參數(shù)的path
const userId = '123' router.push({ name: 'user', params: { userId }}) // -> /user/123 router.push({ path: `/user/${userId}` }) // -> /user/123 // 這里的 params 不生效 router.push({ path: '/user', params: { userId }}) // -> /user
2.上述規(guī)則同樣適用于router-link組件的to屬性
3.如果目的地和當(dāng)前路由相同,只有參數(shù)發(fā)生了改變 (比如從一個(gè)用戶資料到另一個(gè)/users/1->/users/2),你需要使用[這里是代碼018]來響應(yīng)這個(gè)變化 (比如抓取用戶信息)
路由(vue-router)配置及語法
來看一下vue3.0的路由(vue-router),在看vue3.0路由之前,我們先來和vue2.0的路由做個(gè)對(duì)比,看看現(xiàn)在兩者之間的區(qū)別。
1、從引入來說
vue2.0 ,通過vue-router直接引入vueRouter
import VueRouter from "vue-router";
vue3.0, 通過vue-router引入createRouter, createwebHashHistory | createWebHistory
import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router'
2、創(chuàng)建實(shí)例
vue2.0,直接創(chuàng)建vueRouter實(shí)例
const router = new VueRouter({ ? mode: "history", ? base: process.env.BASE_URL, ? routes, });
vue3.0,調(diào)用createRouter方法
const router = createRouter({ ? history: createWebHashHistory(), ? routes });
3、從路由跳轉(zhuǎn)
vue2.0,直接$router
this.$router.push({path: 路徑, query: 參數(shù)})
vue3.0,調(diào)用useRouter方法
import { useRouter } from 'vue-router' const router = useRouter(); router.push('/')
上面我們看了vue3.0的vue2.0的區(qū)別,那么接下來
我們看看vue3.0路由(router的寫法)
1、路由表配置
創(chuàng)建router.ts,在其中寫路由
const routes: Array<RouteRecordRaw> = [ ? { ?? ? ?path: '/', ?? ? ?name: 'supplier', ? ? ? ?component: () => import(/* webpackChunkName: "body" */ '../views/supplier/index.vue')? ? ?meta: { ? ? ? ? icon: 'ion:grid-outline', ? ? ? ? title: '供應(yīng)商', ? ? ? ? orderNo: 4, ? ? ? },? ? },? ? { ? ? path: '/login',? ? ? name: 'login', ? ? component: () => import(/* webpackChunkName: "login" */ '../views/user/login/index.vue') ? ? ?meta: { ? ? ? ? title: '登錄', ? ? ? },? ? } ]; exprot default routes
2、路由出口
創(chuàng)建router下的index.ts
// 從vue-router中引入createRouter,以及模式 import { ? createRouter, ? createWebHashHistory } from 'vue-router' // 引入routes.ts文件 import routes from './routes.ts' const router = createRouter({ ? history: createWebHashHistory(), //createWebHashHistory是hash模式 ? routes }); ? export default router
3、注入項(xiàng)目
// 在main.ts/js里面 import router from './router' createApp(App).use(router).mount('#app')
上面就是vue-router的引入以及簡單配置,那么接下來看看vue-router的頁面跳轉(zhuǎn)及傳參
1、頁面跳轉(zhuǎn)及傳參、
//從vue中引入router import { useRouter } from "vue-router"; const router = useRouter(); //router 包含router對(duì)象的內(nèi)容;如下圖 // 跳轉(zhuǎn)我們可以使用 router.push() // 不帶參數(shù),直接填寫路徑,寫法 router.push('path路徑') || router.push({path: "path路徑"}) ||router.push({name: 'name名字'}) // 帶參數(shù) router.push({path: 'path路徑', query: '參數(shù)'}) router.push({name: 'name名字', params: '參數(shù)'})
2、接參
// 引入route import { useRoute } from "vue-router"; const route = useRoute() // route參數(shù),如下圖 // 如果對(duì)應(yīng)params傳遞參數(shù) route.params.參數(shù)值 // 如果使用query傳參 route.query.參數(shù)
以上內(nèi)容就是vue-router里面的參數(shù)以及頁面跳轉(zhuǎn),參數(shù),接參的方式。其中路由中重定向(redirect),路由守衛(wèi)并沒有變化。那么我們來看看路由守衛(wèi)的前置守衛(wèi)
路由守衛(wèi)-前置守衛(wèi)(beforeEach)
const WhiteList = ['/login']; // 配置白名單 router.beforeEach((to, from, next)=> { if (WhiteList.indexOf(to.fullPath) !== -1) { // 判斷前往頁面是都存在于白名單 next() } else { if (localStorage.getItem('userInfo')) {// 判斷用戶是否d登錄 if (to.name) { // 判斷是否存在路由的name名字,如果有則代表有路由表已經(jīng)存在,name繼續(xù)前往,反之,則不存在 next() } else {// 當(dāng)路由不存在,錄取路由,動(dòng)態(tài)添加路由表, let localRoutes: any = localStorage.getItem('routes'); let recursionList = recursionParam(JSON.parse(localRoutes)); for (let item of recursionList) { router.addRoute(item) } next({ ...to, replace: true }) } } else { next('/login') } } });
注意哦:
vue3.0中的addRoute()添加的是路由對(duì)象,而不是整個(gè)路由數(shù)組。
vue2.0是addRoutes(),直接添加路由表的數(shù)組。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue實(shí)現(xiàn)監(jiān)聽某個(gè)元素滾動(dòng),親測(cè)有效
這篇文章主要介紹了Vue實(shí)現(xiàn)監(jiān)聽某個(gè)元素滾動(dòng),親測(cè)有效!具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07element-plus 如何設(shè)置 el-date-picker 彈出框位置
el-date-picker 組件會(huì)自動(dòng)根據(jù)空間范圍進(jìn)行選擇比較好的彈出位置,但特定情況下,它自動(dòng)計(jì)算出的彈出位置并不符合我們的實(shí)際需求,故需要我們手動(dòng)設(shè)置,這篇文章主要介紹了element-plus 如何設(shè)置 el-date-picker 彈出框位置,需要的朋友可以參考下2024-07-07vue實(shí)現(xiàn)web滾動(dòng)條分頁
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)web滾動(dòng)條分頁,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04關(guān)于ElementPlus中的表單驗(yàn)證規(guī)則詳解
這篇文章主要介紹了關(guān)于ElementPlus中的表單驗(yàn)證,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06vue做移動(dòng)端適配最佳解決方案(親測(cè)有效)
這篇文章主要介紹了vue做移動(dòng)端適配最佳解決方案(親測(cè)有效),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-09-09Vue 讀取HTMLCollection列表的length為0問題
這篇文章主要介紹了Vue 讀取HTMLCollection列表的length為0問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06使用Vue自定義數(shù)字鍵盤組件(體驗(yàn)度極好)
最近做 Vue 開發(fā),因?yàn)橛胁簧夙撁嫔婕暗浇痤~輸入,產(chǎn)品老是覺得用原生的 input 進(jìn)行金額輸入的話 體驗(yàn)很不好,于是自己動(dòng)手寫了一個(gè)使用Vue自定義數(shù)字鍵盤組件,具體實(shí)現(xiàn)代碼大家參考下本文2017-12-12