vue3动态路由

# 路由参数

## query参数

`/mime?user=yyds&sex=1`

- ? 就是query参数

## params 参数

`/shpcar/1/haha`

- /1/hahs 就是params 参数

## useRoute

> 作用获取路由配置对象。

- 获取路由参数

~~~vue

<script setup>

import { useRoute } from 'vue-router';

let $route = useRoute();

console.log($route.query);

</script>

~~~

## 路由动态传参

### params

- 1:在路由配置对象中path编写参数key

- 2:更改url地址时候,传参。

~~~js

{

     // 注意:params参数,传参个数上要求严格,不然无法匹配路由

     path:'/shopcar/:id/:title',/

     name:"ShopCar",

     component:()=>import('@/page/ShopCar.vue')

}

~~~

~~~vue

 <!-- 动态传参 path -->

 <!-- <RouterLink :to="{path:'/mine',query:{user:'yyds',sex:1}}">个人中RouterLink> -->

 <!-- 动态传参 name匹配,路由别名方式 -->

 <RouterLink :to="{name:'Mine',query:{user:'yyds',sex:1}}">个人中</RouterLink>

~~~

1.app.js 文件配置

<template>
<nav>
    <ul>
        <li>
            <RouterLink to="/">首页</RouterLink>
        </li>
        <li>
            <!-- 静态params 参数 -->
            <!-- <RouterLink to="/shopcar/1/苹果">购物车</RouterLink> -->
            <!-- 动态传参,注意只能name匹配;不能使用path -->
            <!-- <RouterLink :to="{name:'ShopCar',params:{id:1,title:'苹果'}}">购物车</RouterLink> -->
            <RouterLink :to="{name:'ShopCar',params:data.params}">购物车</RouterLink>

        </li>
        <li>
            <!-- 静态传query参数 -->
            <!-- <RouterLink to="/mine?user=yyds&sex=1">个人中心</RouterLink> -->

            <!-- 动态传参 path -->
            <!-- <RouterLink :to="{path:'/mine',query:{user:'yyds',sex:1}}">个人中心</RouterLink> -->
            <!-- 动态传参 name匹配,路由别名方式 -->
            <RouterLink :to="{name:'Mine',query:{user:'yyds',sex:1}}">个人中心</RouterLink>
            <!-- 动态传参 绑定响应式变量 -->
            <!-- <RouterLink :to="{name:'Mine',query:data.query}">个人中心</RouterLink> -->

        </li>
    </ul>
</nav>
<RouterView />
</template>
<script setup>
import { RouterLink,RouterView } from 'vue-router';
import { reactive } from 'vue';
let data = reactive({
    query:{
        user:'yyds',
        sex:1
    },
    params:{id:1,title:'苹果'}
})

// setTimeout(() => {
//     data.query.user = 'hshshsh'
// }, 5000);
</script>

<style scoped>

nav li{
    display: inline-block;
    list-style: none;
    margin: 10px;
}
nav a {
    text-decoration: none;
    color: black;
    display: inline-block;
    padding: 25px;
    font-size: 16px;
}

/* 路由高亮展示 */
/* 
router-link-active       被激活的路由才会添加router-link-active 模糊匹配的
router-link-exact-active 精准匹配,只能匹配一个路由
 */
.router-active{
    color: red;
}
</style>

2.main.js 文件配置

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'

const app = createApp(App)
app.use(router) // 注意:必须再跟模板之间,才有效
app.mount('#app')

3.router  index.js文件 路由配置

import { createRouter,createWebHistory } from 'vue-router'

export let constom = [
    // 只要新建一个页面组件,就需要添加一个路由配置。
    {
        path:'/',
        name:"Home",
        component:()=>import('@/page/Home.vue')
    }, {
        // 注意:params参数,传参个数上要求严格,不然无法匹配路由
        path:'/shopcar/:id/:title',// params参数
        name:"ShopCar",
        component:()=>import('@/page/ShopCar.vue')
    }, {
        path:'/mine',
        name:"Mine",
        component:()=>import('@/page/Mine.vue')
    },{
        path:"/about",
        name:'About',
        component:()=>import('@/page/About.vue')
    }
]
let router = createRouter({
    history:createWebHistory(),
    routes:constom,
    linkActiveClass: 'router-active', // 自定义被激活路由的class类名 默认名router-link-active
    linkExactActiveClass:'router-exact-active',// 自定义精准激活router-link的class类名 默认 router-link-exact-active
})

export default router

4.page 文件夹

   4.1.About.vue

    4.2.Home.vue

     4.3.Mine.vue

<template>
    <div>
        <h1>个人中心</h1>
        <h2>{{ $route.query.user }}</h2>
    </div>
</template>
<script setup>
import { useRoute } from 'vue-router';
// import { toRefs } from "vue"; 
/**
 * useRoute() 作用获取路由配置对象的hook函数
 */
let $route = useRoute(); // bug:返回代理对象,不是响应式的????
// $route = toRefs($route) //
// console.log($route);

</script>

   4.4.ShopCar.vue

<template>
    <h1>shop car {{ $route.params.id }}</h1>
    <div class="list">
        <ul>
            <li v-for="item in list.shopcar" :key="item.id">
              <h2>名称:{{ item.title }}</h2>
              <h2>价格: {{ item.price }}</h2>
            </li>
        </ul>
    </div>
</template>
<script setup>
import { reactive} from 'vue';
import { useRoute } from 'vue-router'
let $route = useRoute();
console.log($route.params);
let list = reactive({
    shopcar:[
        {
            id:1,
            title:'苹果',
            price:123
        },  {
            id:2,
            title:'波罗蜜',
            price:123
        },  {
            id:3,
            title:'啤梨',
            price:123
        }
    ]
})
</script>
<style scoped>
li{
    margin: 20px;
    background-color: aqua;
}
</style>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鲤忆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值