实用指南:vue-router(vue 路由)基本使用指南(二)

news/2025/11/10 12:37:59/文章来源:https://www.cnblogs.com/gccbuaa/p/19206665

文章目录

  • 深入使用
    • 导航守卫
    • 重定向与别名
    • history 配置:指定历史模式
    • 路由元信息(meta)
  • 拓展
    • 状态管理(Pinia / Vuex)
      • Pinia / Vuex 介绍
      • Vuex vs Pinia
      • Pinia 基本使用
      • Pinia 使用 Cookies 存储

深入使用

导航守卫

导航守卫用于在路由跳转前、跳转后或解析过程中,添加自定义的逻辑处理,例如权限验证。


## 嵌套路由

嵌套路由用于构建具有层级关系的页面结构,即在一个组件内部再嵌套另一个路由视图。

详见:传送门

  • 定义嵌套路由

    const routes = [
    {
    path: '/user',
    component: User,
    children: [
    {
    // 当/user/profile匹配成功,UserProfile将被渲染到User的<router-view>内部path: 'profile',component: UserProfile,},{path: 'posts',component: UserPosts,},],},];

    注意,以 / 开头的嵌套路径将被视为根路径。这允许你利用组件嵌套,而不必使用嵌套的 URL

  • 在父组件模板中


重定向与别名

重定向:也是通过 routes 配置来完成

  • 示例:

    const routes = [{ path: '/home', redirect: '/' }]
    const routes = [{ path: '/home', redirect: { name: 'homepage' } }]
    const routes = [
    {
    // /search/screens -> /search?q=screens
    path: '/search/:searchText',
    redirect: to => {
    // 方法接收目标路由作为参数
    // return 重定向的字符串路径/路径对象
    return { path: '/search', query: { q: to.params.searchText } }
    },
    },
    {
    path: '/search',
    // ...
    },
    ]

    注意

    • 导航守卫并没有应用在跳转路由上,而仅仅应用在其目标上。在上面的例子中,在 /home 路由中添加 beforeEnter 守卫不会有任何效果。

    • 在写 redirect 的时候,可以省略 component 配置,因为它从来没有被直接访问过,所以没有组件要渲染。

      唯一的例外是嵌套路由:如果一个路由记录有 childrenredirect 属性,它也应该有 component 属性。

  • 相对重定向:重定向到相对位置

    const routes = [
    {
    // 将总是把/users/123/posts重定向到/users/123/profile。
    path: '/users/:id/posts',
    redirect: to => {
    // 该函数接收目标路由作为参数
    return to.path.replace(/posts$/, 'profile')
    },
    },
    ]

别名

  • / 别名为 /home,意味着当用户访问 /home 时,URL 仍然是 /home,但会被匹配为用户正在访问 /

    重定向是指当用户访问 /home 时,URL 会被 / 替换,然后匹配成 /

    const routes = [{ path: '/', component: Homepage, alias: '/home' }]
  • 通过别名,可以自由地将 UI 结构映射到一个任意的 URL,而不受配置的嵌套结构的限制。

    使别名以 / 开头,以使嵌套路径中的路径成为绝对路径。

    甚至可以将两者结合起来,用一个数组提供多个别名:

    const routes = [
    {
    path: '/users',
    component: UsersLayout,
    children: [
    // 为这3个URL(/users、/users/list、/people)呈现 UserList
    { path: '', component: UserList, alias: ['/people', 'list'] },
    ],
    },
    ]
  • 如果路由有参数,需确保在任何绝对别名中包含它们:

    const routes = [
    {
    path: '/users/:id',
    component: UsersByIdLayout,
    children: [
    // 为这3个URL(/users/24、/users/24/profile、/24)呈现 UserDetails
    { path: 'profile', component: UserDetails, alias: ['/:id', ''] },
    ],
    },
    ]

history 配置:指定历史模式

  • createWebHashHistory():Hash 模式(默认模式)

    • 内部传递的实际 URL 之前会加一个井号(#)(如 http://example.com/#/home
    • 无需服务器配置(所有URL,包括是不存在的,都不会被发送到服务器),适合纯前端单页应用(SPA)
    • 不过,它在 SEO 中确实有不好的影响。如果担心这个问题,可以使用 HTML5 模式。
    import { createRouter, createWebHashHistory } from 'vue-router'
    const router = createRouter({
    history: createWebHashHistory(),
    routes: [...],
    })
  • createWebHistory():history 模式 / HTML5 模式

    • url 更简洁(如 http://example.com/home),无 #
    • 需要服务器支持(避免 404 错误,需配置回退到 index.html
    • 适合需要 seo 或对 url 美观有要求的项目:
  • createMemoryHistory():Memory 模式

    • Memory 模式不会假定自己处于浏览器环境,因此不会与 URL 交互也不会自动触发初始导航

    • 需要在调用 app.use(router) 之后手动 push 到初始导航

    • 虽然不推荐,但仍可以在浏览器应用程序中使用此模式

      注意:它不会有历史记录,这意味着无法后退或前进

    • 非常适合 Node 环境和 SSR


路由元信息(meta)

路由配置中可以添加元信息(meta),例如权限控制、页面标题等。

  • 路由配置:

    const routes = [
    {
    path: '/dashboard',
    name: 'Dashboard',
    component: Dashboard,
    meta: { requiresAuth: true, title: '控制面板' }
    }
    ];
  • 获取元信息:

    <script setup>import { useRoute } from 'vue-router';const route = useRoute();console.log(route.meta.title); // "控制面板"</script>
  • 全局导航守卫中使用:

    router.beforeEach((to, from) => {
    if (to.meta.requiresAuth && !isAuthenticated()) {
    return { name: 'Login' };
    }
    });

拓展

状态管理(Pinia / Vuex)

Pinia / Vuex 介绍

对于复杂或跨页面的数据传递,推荐使用状态管理库(Pinia/Vuex)。

  • Vuex:Vuex 是 Vue.js 官方的状态管理库。采用了 Flux 的思想,提供了一个集中式存储,允许组件以不同的方式共享状态。

    核心概念:

    • State: 应用的状态存储。
    • Getters: 类似于计算属性,用于计算基于状态的派生状态。
    • Mutations: 处理状态的唯一方式,直接修改状态。
    • Actions: 进行异步操作,并提交 Mutations。
  • Pinia:Pinia 是一个新兴的状态管理库,也是 Vue.js 的官方推荐替代方案。

    它为 Vue 3 提供了一种更简单、更具灵活性的状态管理方式

    与 Vuex 相比,Pinia 在设计上更现代化,支持 Composition API,使得开发者在使用时更加方便。

    核心概念:

    • Store: 状态存储的基本单位,通过建立一个或多个 Store 来管理状态。
    • State: 用于保存应用的响应式状态。
    • Getters: 计算属性的延伸,基于状态计算派生值。
    • Actions: 包含了执行异步操作的行为和直接修改状态的方法。

Vuex vs Pinia

总结

Vuex 和 Pinia 各有优缺点,选择哪个库取决于你的项目需求和个人偏好。如果你正在开发一个较大型的应用,且已有 Vuex 的使用经验,那么继续使用 Vuex 可能是一个不错的选择。而如果你想要尝试一种更简单、现代化的方式,那么 Pinia 无疑是个值得尝试的选项。


Pinia 基本使用

  • 安装 Pinia

    npm install pinia pinia-plugin-persistedstate
    • pinia-plugin-persistedstate 为 pinia 的数据持久化插件
  • main.tsmain.js 中初始化

    import { createApp } from 'vue';
    import { createPinia } from 'pinia';
    import { createPersistedState } from 'pinia-plugin-persistedstate';
    const app = createApp(App);
    // 将状态管理器 pinia装入app
    const pinia = createPinia();
    pinia.use(createPersistedState()); // 开启状态持久化
    app.use(pinia);
    app.mount('#app');
  • 创建一个 Store

    // store.js
    import { defineStore } from 'pinia';
    export const useCounterStore = defineStore('counter', {
    state: () => ({
    count: 0,
    }),
    getters: {
    doubleCount(state) {
    return state.count * 2;
    },
    },
    actions: {
    increment() {
    this.count++;
    },
    async incrementAsync() {
    await new Promise((resolve) => setTimeout(resolve, 1000));
    this.count++;
    },
    },
    persist: {
    enabled: true, // 启用持久化
    storage: window.localStorage, // 存储到 localStorage(默认)/sessionStorage
    },
    });
  • 使用 Pinia

    
    <script setup lang="ts">
    import {computed} from "vue";
    import {useUserStore} from '@/utils/store.js';
    const counterStore = useUserStore()
    const count = computed(() => counterStore.count)
    const doubleCount = computed(() => counterStore.doubleCount)
    const increment = () => {counterStore.increment()
    }
    const incrementAsync = async () => {await counterStore.incrementAsync()
    }
    </script>

Pinia 使用 Cookies 存储

虽然Cookies主要用于存储少量数据,并且有大小限制(通常为4KB),但在某些情况下,也可以用于简单的持久化。

使用 Cookies 进行持久化时,需要手动处理数据的读写:

export const useUserStore = defineStore('user', {
state: () => ({
name: null,
age: null,
}),
actions: {
setName(name) {
this.name = name;
document.cookie = `name=${name}; path=/; max-age=3600`;
},
getName() {
const name = document.cookie.split('; ').find(row => row.startsWith('name='));
if (name) {
this.name = name.split('=')[1];
}
},
},
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/961266.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年口碑好的EPE珍珠棉发泡机厂家推荐及选购参考榜

2025年口碑好的EPE珍珠棉发泡机厂家推荐及选购参考榜行业背景与市场趋势EPE(Expandable Polyethylene)珍珠棉作为一种新型环保包装材料,近年来在全球包装行业获得了广泛应用。根据全球包装行业协会(GPA)2024年发布…

2025年热门的极简定制五金厂家推荐及选购指南

2025年热门的极简定制五金厂家推荐及选购指南行业背景与市场趋势随着家居装修风格向极简主义转变,定制五金行业迎来了新一轮增长机遇。根据《2024全球家居五金市场报告》显示,全球定制五金市场规模已达680亿美元,预…

2025年靠谱的厚门小角度铰链行业内知名厂家排行榜

2025年靠谱的厚门小角度铰链行业内知名厂家排行榜行业背景与市场趋势随着家居五金行业的快速发展,厚门小角度铰链作为高端家具、橱柜、卫浴等产品的核心配件,市场需求持续增长。据《2024-2025中国家居五金行业白皮书…

2025年比较好的悬臂吊机械手最新TOP品牌厂家排行

2025年悬臂吊机械手最新TOP品牌厂家排行:专业采购指南行业背景与市场趋势随着工业4.0的深入推进和智能制造需求的持续增长,悬臂吊机械手作为自动化生产线上的关键设备,其市场规模呈现稳定上升态势。据《2024-2025中…

2025年质量好的冷库制冷压缩机厂家最新热销排行

2025年质量好的冷库制冷压缩机厂家最新热销排行行业背景与市场趋势随着全球冷链物流行业的快速发展,冷库制冷压缩机市场正迎来新一轮增长。根据国际制冷协会(IIR)最新数据,2024年全球制冷压缩机市场规模已达到280亿…

2025年靠谱的驱鸟器厂家最新用户好评榜

2025年靠谱的驱鸟器厂家最新用户好评榜行业背景与市场趋势随着全球农业现代化进程加速和生态环境保护意识提升,驱鸟设备市场正经历前所未有的增长。根据国际农业设备协会(IAEA)2024年最新报告,全球驱鸟器市场规模已达…

2025年知名的特种纸热门厂家推荐榜单

2025年知名的特种纸热门厂家推荐榜单特种纸,作为纸张领域的高端分支,凭借其独特的性能和广泛的应用场景,近年来市场需求持续攀升。根据中国造纸协会发布的最新数据,2024年中国特种纸市场规模已突破1200亿元,预计2…

《计算机基础》网上考试系统信息管理系统源码-SpringBoot后端+微信小程序前端+MySQL【可直接运行】 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年比较好的矿用托辊优质厂家推荐榜单

2025年比较好的矿用托辊优质厂家推荐榜单行业背景与市场趋势矿用托辊作为输送设备的核心部件,在煤炭、冶金、电力等行业中发挥着不可替代的作用。根据中国重型机械工业协会最新数据显示,2024年我国矿用输送机械市场规…

2025年评价高的高强度锌钢栏杆厂家推荐及采购指南

2025年评价高的高强度锌钢栏杆厂家推荐及采购指南行业背景与市场趋势随着城市化进程的加快和基础设施建设的持续投入,锌钢栏杆作为建筑围护、市政交通和园林景观的重要组成部分,市场需求呈现稳定增长态势。根据中国建…

2025年质量好的防爆微动开关厂家最新热销排行

2025年质量好的防爆微动开关厂家最新热销排行行业背景与市场趋势随着工业自动化水平的不断提升和安全生产要求的日益严格,防爆微动开关作为关键的安全控制元件,市场需求呈现持续增长态势。根据中国电器工业协会最新发…

2025年知名的炫彩金丝绒厂家最新TOP排行榜

2025年知名的炫彩金丝绒厂家最新TOP排行榜行业背景与市场趋势近年来,随着消费升级和家居装饰、服装设计行业的蓬勃发展,炫彩金丝绒作为一种兼具美观性与实用性的高端面料,市场需求持续增长。据中国纺织工业联合会最…

2025年评价高的模具钢45#铣磨加工最新TOP厂家排名

2025年评价高的模具钢45铣磨加工最新TOP厂家排名 行业背景与市场趋势 模具钢作为制造业的核心材料之一,广泛应用于汽车、电子、家电、航空航天等领域。45钢因其良好的切削性能、适中的硬度和较高的性价比,成为模具…

2025年热门的不锈钢烘焙晾网用户好评厂家排行

2025年热门的不锈钢烘焙晾网用户好评厂家排行行业背景与市场趋势随着烘焙文化的普及和家庭烘焙设备的升级,不锈钢烘焙晾网作为烘焙过程中的重要辅助工具,市场需求呈现稳定增长态势。根据中国烘焙行业协会最新发布的《…

2025年口碑好的铁氟龙喷涂行业内知名厂家排行榜

2025年口碑好的铁氟龙喷涂行业内知名厂家排行榜行业背景与市场趋势铁氟龙喷涂作为一种高性能表面处理技术,近年来在工业制造领域获得了广泛应用。根据《2024-2029年中国氟涂料行业市场调研与发展前景预测报告》显示,…

2025年比较好的单灯RJ45插座厂家最新实力排行

2025年比较好的单灯RJ45插座厂家最新实力排行行业背景与市场趋势随着全球数字化转型加速推进,网络基础设施建设需求持续增长,RJ45插座作为网络连接的核心组件,其市场规模在2025年预计将达到78.5亿美元(数据来源:G…

2025年热门的钢材45#切割厂家最新用户好评榜

2025年热门的钢材45切割厂家最新用户好评榜行业背景与市场趋势随着中国制造业的持续升级和基础设施建设的稳步推进,钢材行业作为国民经济的重要基础产业,在2025年迎来了新一轮的发展机遇。根据中国钢铁工业协会最新发…

2025年质量好的除尘布袋高评价厂家推荐榜

2025年质量好的除尘布袋高评价厂家推荐榜 行业背景与市场趋势 随着环保政策的日益严格和工业排放标准的不断提高,除尘布袋作为工业烟气治理的核心部件,市场需求持续增长。据《2024年中国大气污染治理行业分析报告》…

2025年评价高的引水真空机组厂家最新推荐排行榜

2025年评价高的引水真空机组厂家最新推荐排行榜行业背景与市场趋势引水真空机组作为工业领域的关键设备,在石油化工、电力、造纸、选矿等行业中发挥着不可替代的作用。随着中国制造业的持续升级和环保要求的不断提高,…

2025年口碑好的过山车游乐设施TOP实力厂家推荐榜

2025年口碑好的过山车游乐设施TOP实力厂家推荐榜行业背景与市场趋势近年来,全球主题乐园市场持续增长,据国际游乐园及景点协会(IAAPA)数据显示,2024年全球主题公园市场规模已突破600亿美元,预计2025年将保持8%以…