vue3.0?router路由跳轉(zhuǎn)傳參問(wè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)的頁(yè)面引入API—useRouter
import { useRouter } from 'vue-router'2.在跳轉(zhuǎn)頁(yè)面定義router變量
const router = useRouter()
3.用router.push跳轉(zhuǎn)頁(yè)面
// 字符串
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ù)的話,在接收頁(yè)面引入API–useRoute
import { useRoute } from 'vue-router'5.在接收頁(yè)面定義變量route,獲取傳過(guò)來(lái)的變量
//query let userId=route.query.userId; //params let userId=route.params.userId;
頁(yè)面?zhèn)鲄⑿枰⒁獾膯?wè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 }}) // -> /user2.上述規(guī)則同樣適用于router-link組件的to屬性
3.如果目的地和當(dāng)前路由相同,只有參數(shù)發(fā)生了改變 (比如從一個(gè)用戶資料到另一個(gè)/users/1->/users/2),你需要使用[這里是代碼018]來(lái)響應(yīng)這個(gè)變化 (比如抓取用戶信息)
路由(vue-router)配置及語(yǔ)法
來(lái)看一下vue3.0的路由(vue-router),在看vue3.0路由之前,我們先來(lái)和vue2.0的路由做個(gè)對(duì)比,看看現(xiàn)在兩者之間的區(qū)別。
1、從引入來(lái)說(shuō)
vue2.0 ,通過(guò)vue-router直接引入vueRouter
import VueRouter from "vue-router";
vue3.0, 通過(guò)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ū)別,那么接下來(lái)
我們看看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 routes2、路由出口
創(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 router3、注入項(xiàng)目
// 在main.ts/js里面
import router from './router'
createApp(App).use(router).mount('#app')上面就是vue-router的引入以及簡(jiǎn)單配置,那么接下來(lái)看看vue-router的頁(yè)面跳轉(zhuǎn)及傳參
1、頁(yè)面跳轉(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ù)以及頁(yè)面跳轉(zhuǎn),參數(shù),接參的方式。其中路由中重定向(redirect),路由守衛(wèi)并沒有變化。那么我們來(lái)看看路由守衛(wèi)的前置守衛(wèi)
路由守衛(wèi)-前置守衛(wèi)(beforeEach)
const WhiteList = ['/login']; // 配置白名單
router.beforeEach((to, from, next)=> {
if (WhiteList.indexOf(to.fullPath) !== -1) { // 判斷前往頁(yè)面是都存在于白名單
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è)參考,也希望大家多多支持腳本之家。
- uniapp+vue3路由跳轉(zhuǎn)傳參的實(shí)現(xiàn)
- Vue路由跳轉(zhuǎn)傳參或打開新頁(yè)面跳轉(zhuǎn)的方法總結(jié)
- vue3路由跳轉(zhuǎn)params傳參接收不到的解決辦法
- vue3路由配置以及路由跳轉(zhuǎn)傳參詳解
- Vue路由跳轉(zhuǎn)傳參或者打開新頁(yè)面跳轉(zhuǎn)問(wèn)題
- vue路由跳轉(zhuǎn)傳參數(shù)的方法
- vue路由對(duì)不同界面進(jìn)行傳參及跳轉(zhuǎn)的總結(jié)
- Vue項(xiàng)目三級(jí)聯(lián)動(dòng)路由跳轉(zhuǎn)與傳參的思路詳解
相關(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-07
element-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-07
vue實(shí)現(xiàn)web滾動(dòng)條分頁(yè)
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)web滾動(dòng)條分頁(yè),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04
關(guān)于ElementPlus中的表單驗(yàn)證規(guī)則詳解
這篇文章主要介紹了關(guān)于ElementPlus中的表單驗(yàn)證,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06
vue做移動(dòng)端適配最佳解決方案(親測(cè)有效)
這篇文章主要介紹了vue做移動(dòng)端適配最佳解決方案(親測(cè)有效),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-09-09
Vue 讀取HTMLCollection列表的length為0問(wèn)題
這篇文章主要介紹了Vue 讀取HTMLCollection列表的length為0問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06
使用Vue自定義數(shù)字鍵盤組件(體驗(yàn)度極好)
最近做 Vue 開發(fā),因?yàn)橛胁簧夙?yè)面涉及到金額輸入,產(chǎn)品老是覺得用原生的 input 進(jìn)行金額輸入的話 體驗(yàn)很不好,于是自己動(dòng)手寫了一個(gè)使用Vue自定義數(shù)字鍵盤組件,具體實(shí)現(xiàn)代碼大家參考下本文2017-12-12

