Vue3之路由跳轉(zhuǎn)與參數(shù)獲取方式
Vue3路由跳轉(zhuǎn)與參數(shù)獲取
路由跳轉(zhuǎn)
import { useRouter } from "vue-router" export default { ? setup () { ? ? const router = useRouter(); // 第一步 ? ? const state = reactive({ ? ? ? list: [], ? ? ? toDeatil(id) { ? ? ? ? router.push('/product?id=' + id); // 第二步 ? ? ? }, ? ? }) ? ? return { ? ? ? ...toRefs(state) ? ? } ? } }
參數(shù)獲取
import { useRoute } from "vue-router" export default { ? setup () { ? ? const route = useRoute(); // 第一步 ? ? console.log(route.query.type); // 第二步 ? ? const state = reactive({ ? ? ? list: [], ? ? }) ? ? return { ? ? ? ...toRefs(state) ? ? } ? } }
Vue2和Vue3的路由跳轉(zhuǎn)及路由傳參
首先,路由跳轉(zhuǎn)的方法有兩種:
聲明式導(dǎo)航: router-link (務(wù)必要有to屬性),可以實(shí)現(xiàn)路由跳轉(zhuǎn)
編程式導(dǎo)航: 利用的是組件實(shí)例的$router.push|replace方法,可以實(shí)現(xiàn)路由的跳轉(zhuǎn) (可以書寫一些自己的業(yè)務(wù))
示例:
點(diǎn)擊logo按鈕,跳轉(zhuǎn)到home頁(yè) (聲明式)
<router-link class="logo" to="/home"> <img src="./images/logo.png" alt=""> </router-link>
點(diǎn)擊搜索按鈕,執(zhí)行跳轉(zhuǎn)( goSearch ) (編程式)
<button class="btn" type="button" @click="goSearch">搜索</button>
這里的話,Vue2和Vue3寫法有點(diǎn)不一樣
Vue2中就是methods里面定義goSearch()
methods: { goSearch(){ this.$router.push('/search'); } }
Vue3可以使用setup語(yǔ)法糖
<script> import { useRouter } from 'vue-router' export default { name: 'HeaderIndex', setup(){ const $router = useRouter() // method function goSearch(){ $router.push('/search'); } return { goSearch } } } </script>
接著再寫一下路由傳參,那參數(shù)一共有2種:
- params參數(shù): 屬于路徑當(dāng)中的一部分,需要注意,在配置路由的時(shí)候,需要占位
- query參數(shù): 不屬于路徑當(dāng)中的一部分,類似于ajax中的queryString /home?k=v$kv=,不需要占位
比如,在搜索框中輸入一些內(nèi)容,點(diǎn)擊搜索按鈕,完成路由傳參跳轉(zhuǎn)
接下來(lái)都是以Vue3中為例,最后再寫上vue2中的相應(yīng)代碼
第一種:字符串
給搜索框進(jìn)行雙向綁定keyword
<form action="###" class="searchForm"> <input type="text" v-model="keyword"/> <button class="btn" type="button" @click="goSearch">搜索</button> </form>
首先,如果要使用params參數(shù)的話,需要配置路由時(shí)進(jìn)行占位
const routes = [ { path:'/search/:keyword', component: SearchIndex, }
然后使用字符串形式傳遞參數(shù)
<script> import { useRouter } from 'vue-router' import {ref} from 'vue' export default { name: 'HeaderIndex', setup(){ const $router = useRouter() let keyword = ref('') // method function goSearch(){ // 路由傳參 // 第一種:字符串形式 $router.push('/search/' + keyword.value + "?k=" + keyword.value.toUpperCase()); } return { goSearch, keyword } } } </script>
因?yàn)槲覀兪褂昧藃ef,所以接收參數(shù)的時(shí)候要 .value來(lái)獲取,不然是讀不到的。
- /asd 就是 params參數(shù)
- ASD 就是 query參數(shù)
- 我們可以通過(guò)輸出來(lái)驗(yàn)證
我在SearchIndex.vue中通過(guò)模版字符串將它顯示
<template> <div> 我是搜索 <h1>params參數(shù)---{{$route.params.keyword}}</h1> <h1>query參數(shù)---{{$route.query.k}}</h1> </div> </template>
第二種:模版字符串
這種寫法比第一種字符串形式會(huì)簡(jiǎn)單一些,要替換的就是下面這串,其余不變。就是用模版字符串來(lái)代替字符串拼接而已
// 第二種:模版字符串 $router.push(`/search/${keyword.value}?k=${keyword.value.toUpperCase()}`)
第三種:對(duì)象寫法
這種寫法是最常用的,也是最直觀的
但如果使用對(duì)象寫法,并且還是用的params參數(shù),就不能用path形式了,而是要用name形式
router/index.js中對(duì)search的路由添加name。不再使用path
{ path:'/search/:keyword', component: SearchIndex, meta:{show:true}, name:"search" }
function goSearch(){ console.log(keyword.value); // 路由傳參 // 第一種:字符串形式 // $router.push('/search/' + keyword.value + "?k=" + keyword.value.toUpperCase()); // 第二種:模版字符串 // $router.push(`/search/${keyword.value}?k=${keyword.value.toUpperCase()}`) // 第三種:對(duì)象寫法 $router.push({ name:"search", params:{keyword:keyword.value}, query:{k:keyword.value.toUpperCase()} }) }
而Vue2中的寫法其實(shí)大同小異,就是沒(méi)有setup和ref。
function goSearch(){ // 路由傳參 // 第一種:字符串形式 // this.$router.push('/search/' + this.keyword + "?k=" + this.keyword.toUpperCase()); // 第二種:模版字符串 // this.$router.push(`/search/${this.keyword}?k=${this.keyword.toUpperCase()}`) // 第三種:對(duì)象寫法 this.$router.push({ name:"search", params:{keyword:this.keyword}, query:{k:this.keyword.toUpperCase()} }) }
就是訪問(wèn)keyword時(shí)需要this訪問(wèn),并且由于沒(méi)有ref以后也不需要加上value了
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue實(shí)現(xiàn)商品詳情頁(yè)功能之商品選項(xiàng)卡
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)商品詳情頁(yè)功能之商品選項(xiàng)卡,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04使用VUE實(shí)現(xiàn)在table中文字信息超過(guò)5個(gè)隱藏鼠標(biāo)移到時(shí)彈窗顯示全部
這篇文章主要介紹了使用VUE實(shí)現(xiàn)在table中文字信息超過(guò)5個(gè)隱藏,鼠標(biāo)移到時(shí)彈窗顯示全部,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09Vue draggable實(shí)現(xiàn)從左到右拖拽功能
這篇文章主要為大家詳細(xì)介紹了Vue draggable實(shí)現(xiàn)從左到右拖拽功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04Vue.js+Layer表格數(shù)據(jù)綁定與實(shí)現(xiàn)更新的實(shí)例
下面小編就為大家分享一篇Vue.js+Layer表格數(shù)據(jù)綁定與實(shí)現(xiàn)更新的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-03-03Vue包大小優(yōu)化的實(shí)現(xiàn)(從1.72M到94K)
這篇文章主要介紹了Vue包大小優(yōu)化的實(shí)現(xiàn)(從1.72M到94K),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02vue父子組件傳值不能實(shí)時(shí)更新的解決方法
Vue是一個(gè)以數(shù)據(jù)驅(qū)動(dòng)、組件化的前端框架,其中組件化是Vue中較為重要的概念之一,組件之間的通信則成為Vue中較為普遍的需求,下面這篇文章主要給大家介紹了關(guān)于vue父子組件傳值不能實(shí)時(shí)更新的解決方法,需要的朋友可以參考下2023-05-05Vue.extend實(shí)現(xiàn)掛載到實(shí)例上的方法
這篇文章主要介紹了Vue.extend實(shí)現(xiàn)掛載到實(shí)例上的方法,結(jié)合實(shí)例形式分析了Vue.extend實(shí)現(xiàn)掛載到實(shí)例上的具體操作步驟與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-05-05基于Vue3.0開(kāi)發(fā)輕量級(jí)手機(jī)端彈框組件V3Popup的場(chǎng)景分析
這篇文章主要介紹了基于Vue3.0開(kāi)發(fā)輕量級(jí)手機(jī)端彈框組件V3Popup,本文通過(guò)場(chǎng)景分析給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12vue不操作dom實(shí)現(xiàn)圖片輪播的示例代碼
這篇文章主要介紹了vue不操作dom實(shí)現(xiàn)圖片輪播的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12