当前位置: 首页 > news >正文

Vue Router 入门指南:基础配置、路由守卫与动态路由

Vue Router 入门指南:基础配置、路由守卫与动态路由

在这里插入图片描述
简介:
Vue Router 是 Vue.js 官方的路由管理工具,用于在 Vue 应用中实现页面导航。掌握 Vue Router 的基本配置、路由守卫以及动态路由和懒加载是构建复杂 Vue 应用的基础。本文将详细介绍 Vue Router 的核心概念,并提供 Vue 2 和 Vue 3 的示例代码,帮助你快速上手。

目标:
本文旨在帮助读者理解和掌握 Vue Router 的基本用法,包括如何配置路由、使用路由守卫和导航钩子,以及如何实现动态路由和懒加载。通过对比 Vue 2 和 Vue 3 的示例,读者将能够灵活地在不同版本的 Vue 应用中应用这些技术。


文章目录

    • Vue Router 入门指南:基础配置、路由守卫与动态路由
      • 1. 路由基础配置
        • **1.1 Vue 2 示例代码**
        • **1.2 Vue 3 示例代码**
      • 2. 路由守卫与导航钩子
        • **2.1 Vue 2 示例代码**
        • **2.2 Vue 3 示例代码**
      • 3. 动态路由与懒加载
        • **3.1 Vue 2 示例代码**
        • **3.2 Vue 3 示例代码**
      • 总结

1. 路由基础配置

路由基础配置是使用 Vue Router 进行页面导航的第一步。配置路由包括定义路由规则和将这些规则应用到 Vue 实例中。

1.1 Vue 2 示例代码

安装 Vue Router

npm install vue-router

路由配置(router/index.js)

import Vue from 'vue';
import Router from 'vue-router';
import Home from '@/components/Home.vue';
import About from '@/components/About.vue';Vue.use(Router);export default new Router({mode: 'history',routes: [{path: '/',name: 'Home',component: Home},{path: '/about',name: 'About',component: About}]
});

主文件配置(main.js)

import Vue from 'vue';
import App from './App.vue';
import router from './router';new Vue({router,render: h => h(App)
}).$mount('#app');

组件(Home.vue 和 About.vue)

Home.vue:

<template><div><h1>Home Page</h1></div>
</template><script>
export default {name: 'Home'
};
</script>

About.vue:

<template><div><h1>About Page</h1></div>
</template><script>
export default {name: 'About'
};
</script>
1.2 Vue 3 示例代码

安装 Vue Router

npm install vue-router

路由配置(router/index.js)

import { createRouter, createWebHistory } from 'vue-router';
import Home from '../components/Home.vue';
import About from '../components/About.vue';const routes = [{path: '/',name: 'Home',component: Home},{path: '/about',name: 'About',component: About}
];const router = createRouter({history: createWebHistory(),routes
});export default router;

主文件配置(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');

组件(Home.vue 和 About.vue)

Home.vue:

<template><div><h1>Home Page</h1></div>
</template><script setup>
import { defineComponent } from 'vue';export default defineComponent({name: 'Home'
});
</script>

About.vue:

<template><div><h1>About Page</h1></div>
</template><script setup>
import { defineComponent } from 'vue';export default defineComponent({name: 'About'
});
</script>

2. 路由守卫与导航钩子

路由守卫用于在路由变化前、路由进入后或路由离开前进行一些操作,如权限检查、数据预取等。

2.1 Vue 2 示例代码

全局路由守卫

// router/index.js
import Vue from 'vue';
import Router from 'vue-router';
import Home from '@/components/Home.vue';
import About from '@/components/About.vue';Vue.use(Router);const router = new Router({mode: 'history',routes: [{ path: '/', name: 'Home', component: Home },{ path: '/about', name: 'About', component: About }]
});// 路由守卫
router.beforeEach((to, from, next) => {// 在这里可以进行权限检查console.log(`导航到 ${to.path}`);next(); // 必须调用 next() 方法来继续导航
});export default router;

路由独享守卫

// About.vue
<template><div><h1>About Page</h1></div>
</template><script>
export default {name: 'About',beforeRouteEnter(to, from, next) {// 在路由进入前调用console.log('进入 About 页面');next();}
};
</script>
2.2 Vue 3 示例代码

全局路由守卫

// router/index.js
import { createRouter, createWebHistory } from 'vue-router';
import Home from '../components/Home.vue';
import About from '../components/About.vue';const routes = [{ path: '/', name: 'Home', component: Home },{ path: '/about', name: 'About', component: About }
];const router = createRouter({history: createWebHistory(),routes
});// 路由守卫
router.beforeEach((to, from, next) => {// 在这里可以进行权限检查console.log(`导航到 ${to.path}`);next(); // 必须调用 next() 方法来继续导航
});export default router;

路由独享守卫

<!-- About.vue -->
<template><div><h1>About Page</h1></div>
</template><script setup>
import { onBeforeRouteEnter } from 'vue-router';onBeforeRouteEnter((to, from, next) => {// 在路由进入前调用console.log('进入 About 页面');next();
});
</script>

3. 动态路由与懒加载

动态路由允许你根据路由参数显示不同的内容,懒加载可以提高应用性能,通过按需加载路由组件来减小初始包体积。

3.1 Vue 2 示例代码

动态路由配置

// router/index.js
import Vue from 'vue';
import Router from 'vue-router';
import User from '@/components/User.vue';Vue.use(Router);export default new Router({mode: 'history',routes: [{path: '/user/:id',name: 'User',component: User}]
});

组件(User.vue)

<template><div><h1>User {{ $route.params.id }}</h1></div>
</template><script>
export default {name: 'User'
};
</script>

懒加载

// router/index.js
import Vue from 'vue';
import Router from 'vue-router';Vue.use(Router);export default new Router({mode: 'history',routes: [{path: '/user/:id',name: 'User',component: () => import('@/components/User.vue')}]
});
3.2 Vue 3 示例代码

动态路由配置

// router/index.js
import { createRouter, createWebHistory } from 'vue-router';
import User from '../components/User.vue';const routes = [{path: '/user/:id',name: 'User',component: User}
];const router = createRouter({history: createWebHistory(),routes
});export default router;

组件(User.vue)

<template><div><h1>User {{ $route.params.id }}</h1></div>
</template><script setup>
import { useRoute } from 'vue-router';const route = useRoute();
</script>

懒加载

// router/index.js
import { createRouter, createWebHistory } from 'vue-router';const routes = [{path: '/user/:id',name: 'User',component: () => import('../components/User.vue')}
];const router = createRouter({history: createWebHistory(),routes
});export default router;

总结

本文详细介绍了 Vue Router 的基础配置、路由守卫与导航钩子、动态路由与懒加载。在 Vue 2 和 Vue 3 中,这些技术的使用方式有所不同,但核心概念保持一致。通过掌握这些内容,你可以更高效地管理 Vue 应用中的页面导航,并提升应用的性能和用户体验。希望本文能帮助你在实际项目中更好地使用 Vue Router。

看到这里的小伙伴,欢迎 点赞👍评论📝收藏🌟

希望这篇关于 Vue Router 基本使用的文章对你有所帮助。如果有其他需要调整或补充的地方,请告诉我!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 关于武汉芯景科技有限公司的IIC缓冲器芯片XJ4307开发指南(兼容LTC4307)
  • LabVIEW软件,如何检测连接到的设备?
  • 3.记:Android EditText接收扫码枪输入数据丢失问题
  • 828华为云征文|华为云Flexus X实例docker部署MinIO对象存储系统obs
  • 【机器人工具箱Robotics Toolbox开发笔记(一)】Matlab机器人工具箱简介
  • 如何在Word中插入复选框
  • Linux内核 -- CGROUP子系统之内存控制组 mem_cgroup_charge函数
  • idea中配置Translation插件完成翻译功能
  • 覆盖索引是什么意思?
  • 利用深度学习实现验证码识别-4-ResNet18+imagecaptcha
  • 史上最全-经管类国家社科基金立项名单汇总 1991-2024
  • 光伏电站的工程量造价怎么算的
  • 如何优化谷歌排名更有效?
  • 【笔记】408刷题笔记
  • 浅谈C#之ConcurrentQueue
  • 【Leetcode】101. 对称二叉树
  • hexo+github搭建个人博客
  • 2019年如何成为全栈工程师?
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • ES6 学习笔记(一)let,const和解构赋值
  • es6(二):字符串的扩展
  • express如何解决request entity too large问题
  • HomeBrew常规使用教程
  • JavaScript DOM 10 - 滚动
  • mysql 5.6 原生Online DDL解析
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • 前嗅ForeSpider教程:创建模板
  • 我是如何设计 Upload 上传组件的
  • 学习ES6 变量的解构赋值
  • - 转 Ext2.0 form使用实例
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • gunicorn工作原理
  • 第二十章:异步和文件I/O.(二十三)
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • 如何在招聘中考核.NET架构师
  • # Java NIO(一)FileChannel
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #70结构体案例1(导师,学生,成绩)
  • #考研#计算机文化知识1(局域网及网络互联)
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • ${factoryList }后面有空格不影响
  • (02)vite环境变量配置
  • (ibm)Java 语言的 XPath API
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (四)c52学习之旅-流水LED灯
  • (转)linux下的时间函数使用
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • ./configure,make,make install的作用