Router_路由传参

目录

接收路径参数

声明式路由路径传参

ShowDetail.vue

clike 复制代码
<script setup>

// 接收传递过来的路径参数
// useRoute函数是用来接收参数的
//  route.params表示路径参数

import {useRoute} from 'vue-router'
import {ref} from 'vue'

let route = useRoute()
let languageId = ref(0)
let languageName = ref("")

languageId.value = route.params.id 
languageName.value = route.params.language


</script>

<template>
  <div>
    <h1> ShowDetail 接收路径参数</h1>
    <h2>{{languageId}}{{languageName}}是世界上最好的语言</h2>
  </div>
</template>

<style scoped>

</style>

router.js

clike 复制代码
// 导入创建路由的相关方法
import Home from '../components/Home.vue'
import List from '../components/List.vue'
import Update from '../components/Update.vue'
import Add from '../components/Add.vue'
import ShowDetail from '../components/ShowDetail.vue'
import { createRouter,createWebHashHistory} from 'vue-router'
const router = createRouter({
    history:createWebHashHistory(),
    routes:[
        {
            path:"/showDetail/:id/:language",
            component:ShowDetail
        },
        {
            path:"/",
            component:Home
        },
        {
            path:"/home",
            component:Home
        },
        {
            path:"/list",
            component:List
        },
        {
            path:"/add",
            component:Add
        },
        {
            path:"/update",
            component:Update
        }
    ]

})
export default router

main.js

clike 复制代码
import { createApp } from 'vue'


import App from './App.vue'

import router from './routers/router.js'

const app = createApp(App)

app.use(router)
app.mount('#app')

App.vue

clike 复制代码
<script setup>
import {useRouter} from 'vue-router'
import {ref} from 'vue'
const router = useRouter()

</script>

<template>
  <div>
  
  <router-link to="/showDetail/1/java">声明式路由路径传参</router-link>
  <hr>
  <router-view></router-view>
  </div>

</template>

<style scoped>

</style>

编程式路由路径传参

更改ShowDetail.vue

clike 复制代码
<script setup>

// 接收传递过来的路径参数
// useRoute函数是用来接收参数的
//  route.params表示路径参数

import {useRoute} from 'vue-router'
import {ref,onUpdated} from 'vue'

let route = useRoute()
let languageId = ref(0)
let languageName = ref("")

languageId.value = route.params.id 
languageName.value = route.params.language

onUpdated(
  ()=>{
    languageId.value = route.params.id 
    languageName.value = route.params.language
  }
)


</script>

<template>
  <div>
    <h1> ShowDetail 接收路径参数</h1>
    <h2>{{languageId}}{{languageName}}是世界上最好的语言</h2>
  </div>
</template>

<style scoped>

</style>

更改App.vue

clike 复制代码
<script setup>
import {useRouter} from 'vue-router'
import {ref} from 'vue'
const router = useRouter()
function showDetail(id,language){
  router.push(`/showDetail/${id}/${language}`)
}

</script>

<template>
  <div>
  
  <router-link to="/showDetail/1/java">声明式路由路径传参</router-link>
  <button @click="showDetail(2,'PHP')">编程式路由路径传参</button>

  <hr>
  <router-view></router-view>
  </div>

</template>

<style scoped>

</style>

也可以使用path

接收键值对参数

声明式路由键值对传参

ShowDetail2.vue

clike 复制代码
<script setup>
// 接收传递过来的路径参数
// useRoute函数是用来接收参数的
//  route.params表示路径参数
//  route.query表示键值对

import {useRoute} from 'vue-router'
import {ref,onUpdated} from 'vue'

let route = useRoute()
let languageId = ref(0)
let languageName = ref("")

languageId.value = route.query.id 
languageName.value = route.query.language

onUpdated(
  ()=>{
    languageId.value = route.query.id 
    languageName.value = route.query.language
  }
)

</script>

<template>
  <div>
    <h1> ShowDetail 接收键值对参数</h1>
    <h2>{{languageId}}{{languageName}}是世界上最好的语言</h2>
  </div>
</template>

<style scoped>

</style>

router.js

clike 复制代码
// 导入创建路由的相关方法
import Home from '../components/Home.vue'
import List from '../components/List.vue'
import Update from '../components/Update.vue'
import Add from '../components/Add.vue'
import ShowDetail from '../components/ShowDetail.vue'
import ShowDetail2 from '../components/ShowDetail2.vue'
import { createRouter,createWebHashHistory} from 'vue-router'
const router = createRouter({
    history:createWebHashHistory(),
    routes:[

        {
            path:"/showDetail2",
            component:ShowDetail2
        },
        {
            path:"/showDetail/:id/:language",
            component:ShowDetail
        },
        {
            path:"/",
            component:Home
        },
        {
            path:"/home",
            component:Home
        },
        {
            path:"/list",
            component:List
        },
        {
            path:"/add",
            component:Add
        },
        {
            path:"/update",
            component:Update
        }
    ]

})
export default router

App.vue

clike 复制代码
<script setup>
import {useRouter} from 'vue-router'
import {ref} from 'vue'
const router = useRouter()
function showDetail(id,language){
  // router.push(`/showDetail/${id}/${language}`)
  router.push({path:`/showDetail/${id}/${language}`})
}

</script>
<template>
  <div>
  <router-link to="/showDetail/1/java">声明式路由路径传参</router-link>
  <button @click="showDetail(2,'PHP')">编程式路由路径传参</button>
  <hr>

    <router-link to="/showDetail2?id=1&language=java">声明式路由键值对传参</router-link>
  <button @click="showDetail(2,'PHP')">编程式路由键值对传参</button>

  <router-view></router-view>
  </div>

</template>
<style scoped>
</style>

声明式路由键值对传参也可以用如下写法

编程式路由键值对传参

App.vue

clike 复制代码
<script setup>
import {useRouter} from 'vue-router'
import {ref} from 'vue'
const router = useRouter()
function showDetail(id,language){
  // router.push(`/showDetail/${id}/${language}`)
  router.push({path:`/showDetail/${id}/${language}`})
}

function showDetail2(id,language){
    router.push(`/showDetail2?id=${id}&language=${language}`)

}

</script>
<template>
  <div>
  <router-link to="/showDetail/1/java">声明式路由路径传参</router-link>
  <button @click="showDetail(2,'PHP')">编程式路由路径传参</button>
  <hr>

  <!-- <router-link to="/showDetail2?id=1&language=java">声明式路由键值对传参</router-link> -->
  <router-link v-bind:to="{path:'/showDetail2',query:{id:2,language:'php'}}">声明式路由键值对传参</router-link>

  <button @click="showDetail2(3,'python')">编程式路由键值对传参</button>
  

  <router-view></router-view>
  </div>

</template>
<style scoped>
</style>

router.push也可以用如下写法

相关推荐
程序员黑豆2 小时前
Java 注释详解:单行、多行与文档注释的完整指南
java·前端·ai编程
剪刀石头布啊2 小时前
antd中可编辑表格中巧用useWatch实现联动高性能效果,以及定制延伸学习
前端
油丶酸萝卜别吃3 小时前
前端转全栈学习路线
前端·学习
浮生望3 小时前
前端路由进阶:History API原理与手写HistoryRouter
前端
陆枫Larry3 小时前
JavaScript 中的竞态是什么,为啥会有竟态?
前端
上海安当技术5 小时前
半天接入:USBKey RESTful API + C 动态库,Web 和 C/S 两套集成路径实战
前端·后端·restful·集成·usbkey
DevUI团队6 小时前
从“即兴创作”到“规格先行”,华为云码道(CodeArts)代码智能体持续深耕企业级规范驱动开发能力
前端·人工智能·后端
weixin_431600447 小时前
NestJS 入门(3):Guard 如何挡住未登录请求?
前端·后端·学习·nest.js
avi91117 小时前
[AI教做人]AI平台做2项目;一个3D模型展示,另一个框架多人
javascript·人工智能·ai·3d模型·3d引擎·顶点和法线
kyriewen7 小时前
我用Claude Code两天干完了团队两周的排期——周报发出去那一刻我就后悔了
前端·javascript·ai编程