Vue-Router 第九节:路由传参

115 阅读2分钟

Vue-Router 第九节:路由传参

前言:路由传参主要有两种方式:query 路由传参 、 params路由传参,下面来学习这两种方式,并总结他们的区别。

1、query路由传参

// router/index.ts
import About from '@/views/about/index.vue'
import path from 'path';
import { createRouter, createWebHistory, RouteRecordRaw } from "vue-router";
// 1、定义路由 每个路由都需要映射到一个组件。
const routes: Array<RouteRecordRaw> = [
    // 可直接导入或者引入
    {
        path: '/',
        component: () => import("@/views/home/index.vue"),
    },
    {
        path:'/user',
        name:'user',
        component:import("@/views/user/index.vue")
    }
]
​
// 2、创建路由实例并传递routesconst router = createRouter({
    // 路由的模式:  vue2:
    // vue2 mode  history | vue3  createWebHistory
    // vue2 mode  hash    | vue3  createWebHashHistory
    // vue2 mode  abstact | vue3  createMemoryHistory   
    history: createWebHistory(),
    routes
})
​
// 导出
export default router
// App.vue
<template>
  <div>
    <router-view />
    <button @click="Topages">进入user路由页面</button>
  </div>
</template>
​
<script setup lang="ts">
import { useRouter } from 'vue-router';
const Item ={          //  ********* 要传的参数
  name:'月月',
  age:18,
  hobby:'吃饭'
}
const router = useRouter()
const Topages = () => {
  router.push({ path: '/user', query: Item })           // ********* 进行传参
}
</script>
​
<style scoped></style>
​
// user/index.vue
<template>
    <div style="background-color: pink;">
        <H1>
            欢迎进入技术部专属页面!<br>
            姓名:{{ $route.query.name }}<br>
            年龄:{{ $route.query.age }}<br>
            爱好:{{ $route.query.hobby }}
        </H1>
        <router-view></router-view>
    </div>
</template>
​
<script setup lang="ts">
</script>
​
<style></style>

1713249494338.jpg

2、Params路由传参

    // router/index.ts
    {
        path:'/user/:name/:age',         
       //********** params传参必须在路由配置设置占位符参数,添加了一个:name占位符,就传递一个为name的参数。这里添加了两个
        name:'user',
        component:import("@/views/user/index.vue"),
    }
// App.vue
<script setup lang="ts">
import { useRouter } from 'vue-router';
const router = useRouter()
const Topages = () => {
  router.push({ name: 'user', params: { name: '月月', age: '18' } })   //配置几个就只能传几个 
​
}
​
</script>
// user/index.vue
<template>
    <div style="background-color: pink;">
        <H1>
            欢迎进入技术部专属页面!<br>
            姓名:{{ route.params.name }}<br>
            年龄:{{ route.params.age }}<br>
        </H1>
        <router-view></router-view>
    </div>
</template>
​
<script setup lang="ts">
import { useRoute } from 'vue-router';          
const route = useRoute()               // 可用 useRoute()  获取参数
</script>
​
<style></style>

1713254837540.jpg

3、query和Params的区别

  1. query 传参配置的是 path,而 params 传参配置的是name,在 params中配置 path 无效
  2. query 在路由配置不需要设置参数,而 params 必须设置占位符参数
  3. query 传递的参数会显示在地址栏中, 只能接受对象, 现在params传递的参数也会在地址栏中显示
  4. params传参刷新会无效,但是 query 会保存传递过来的值,刷新不变 ;
  5. 路由配置