vue3路由+meta

本文介绍了Vue3中与路由交互的meta属性,包括onBeforeRouteLeave和onBeforeRouteUpdate钩子的使用。重点讨论了如何基于路由配置数组动态生成导航,强调了在处理路由数组时深拷贝的重要性,提供了一个基础版的实现步骤,帮助理解动态导航生成的目的和方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

meta 路由元元素

meta中key-value都是自定义的

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

export let constom = [
    {
        path:'/',
        name:"Home",
        component:()=>import('@/page/Home/index.vue'),
        // meta 路由元元素
        // meta中key-value都是自定义的
        meta:{
            title: "首页"
        }
    }, {
        path:'/shopcar',
        name:"ShopCar",
        component:()=>import('@/page/ShopCar/index.vue'),
        meta:{
            title:'购物车'
        }
    }, {
        path:'/mine',
        name:"Mine",
        component:()=>import('@/page/Mine/index.vue'),
        meta:{
            title:'个人中心'
        }
    }
]
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

onBeforeRouteLeave  

离开路由组件时候触发。基本不适用

onBeforeRouteUpdate

/**

 * 1:渲染的组件不变

 * 2:路由地址发生改变

 * 用于:监听路由地址的变化 (特别适合params参数时候)

 *

 * 还可以使用 watch 监听 $route 方式。代替onBeforeRouteUpdate

 */

<template>
    <h1>shop car {{ $route.params.id }}{{ $route.params.title }}</h1>
    <div class="list">
        <ul>
            <li v-for="item in list.shopcar" :key="item.id" @click="e=>change(item)">
              <h2>名称:{{ item.title }}</h2>
              <h2>价格: {{ item.price }}</h2>
            </li>
        </ul>
    </div>
</template>
<script setup>
import { reactive} from 'vue';
import { useRoute,useRouter,onBeforeRouteLeave,onBeforeRouteUpdate } from 'vue-router'
import { getCarList } from '@/api.js'
let $route = useRoute();
let $router = useRouter();
console.log($route.params);
let list = reactive({
    shopcar:[]
})

getCarList().then((data) => {
    console.log(data);
    list.shopcar = data.data;
})

const change = ({id,title})=>{
    // 编程式导航。
    $router.push({
        name:'ShopCar',
        params:{
            id,
            title
        }
    })
}

// 离开路由组件时候触发。基本不适用
onBeforeRouteLeave((to,from,next)=>{
    console.log('组件内部守卫');
    next()
})
/**
 * 1:渲染的组件不变
 * 2:路由地址发生改变
 * 用于:监听路由地址的变化 (特别适合params参数时候)
 * 
 * 还可以使用 watch 监听 $route 方式。代替onBeforeRouteUpdate
 */
onBeforeRouteUpdate((to,from,next)=>{
    console.log('before update');
    next()
})

</script>
<style scoped>
li{
    margin: 20px;
    background-color: aqua;
}
</style>

# 如何根据路由配置数组动态生成导航

>**路由配置数组是数据的源头,不可以被改变**

>路由数组被导出后,深拷贝和浅拷贝的问题。建议深拷贝

>我们平时import 导入导出数组对象都是浅拷贝。

>深拷贝会消耗内存

## 基础版

- 1:在每个路由配置中配置`meta`

- 2: 导出路由配置数组

- 3:在主要布局组件中,导入路由数组 并进行深拷贝处理

- 4:根据路由数组循环遍历导航。

>实现根据路由配置动态生成导航

>目的为了让大家有意识

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

鲤忆

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

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

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

打赏作者

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

抵扣说明:

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

余额充值