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

Vue 路由基础:Vue 2 和 Vue 3 的比较与使用

Vue.js 是一款非常流行的前端框架,而 Vue Router 是 Vue.js 的官方路由管理库。在前端开发中,路由是处理页面跳转和视图管理的关键部分。Vue 2 和 Vue 3 都使用 Vue Router 来管理路由,但是随着 Vue 3 的发布,Vue Router 也有了不少变化。在本文中,我们将详细介绍 Vue 2 和 Vue 3 中的路由使用,比较它们之间的不同,并提供一些示例代码。

一、安装 Vue Router

在 Vue 项目中使用 Vue Router,首先需要安装它:

Vue 2 中安装 Vue Router
npm install vue-router@3
Vue 3 中安装 Vue Router
npm install vue-router@4

二、基本的路由配置

1. Vue 2 中的路由配置

在 Vue 2 中,路由配置通常是在 src/router/index.js 文件中进行的。基本的路由配置如下:

// src/router/index.js
import Vue from 'vue';
import Router from 'vue-router';
import Home from '@/components/Home';
import About from '@/components/About';

Vue.use(Router);

export default new Router({
  routes: [
    {
      path: '/',
      name: 'Home',
      component: Home
    },
    {
      path: '/about',
      name: 'About',
      component: About
    }
  ]
});
2. Vue 3 中的路由配置

Vue 3 中,Vue Router 进行了部分 API 更改。以下是 Vue 3 中的路由配置示例:

// src/router/index.js
import { createRouter, createWebHistory } from 'vue-router';
import Home from '@/components/Home';
import About from '@/components/About';

const routes = [
  {
    path: '/',
    name: 'Home',
    component: Home
  },
  {
    path: '/about',
    name: 'About',
    component: About
  }
];

const router = createRouter({
  history: createWebHistory(),
  routes
});

export default router;

三、路由守卫

路由守卫允许我们在路由跳转前、跳转后进行操作。Vue Router 提供了全局守卫、路由独享守卫和组件内守卫。

1. 全局守卫

全局守卫在 Vue 2 和 Vue 3 中的写法相似,都是通过 beforeEachafterEach 方法来设置。

// Vue 2 示例
router.beforeEach((to, from, next) => {
  console.log('导航开始');
  next();
});
// Vue 3 示例
router.beforeEach((to, from, next) => {
  console.log('导航开始');
  next();
});
2. 路由独享守卫

路由独享守卫用于单个路由配置内,写法如下:

// Vue 2 示例
const routes = [
  {
    path: '/about',
    name: 'About',
    component: About,
    beforeEnter: (to, from, next) => {
      console.log('路由独享守卫');
      next();
    }
  }
];
// Vue 3 示例
const routes = [
  {
    path: '/about',
    name: 'About',
    component: About,
    beforeEnter: (to, from, next) => {
      console.log('路由独享守卫');
      next();
    }
  }
];
3. 组件内守卫

在组件内使用守卫来控制访问权限。具体的守卫包括 beforeRouteEnterbeforeRouteLeavebeforeRouteUpdate

// Vue 2 示例
export default {
  beforeRouteEnter(to, from, next) {
    console.log('进入路由');
    next();
  },
  beforeRouteLeave(to, from, next) {
    console.log('离开路由');
    next();
  }
};
// Vue 3 示例
export default {
  beforeRouteEnter(to, from, next) {
    console.log('进入路由');
    next();
  },
  beforeRouteLeave(to, from, next) {
    console.log('离开路由');
    next();
  }
};

四、动态路由

动态路由可以通过路由参数传递动态信息。在 Vue 2 和 Vue 3 中的写法基本相同。

1. 配置动态路由
// Vue 2 示例 
const routes = [ { path: '/user/:id', name: 'User', component: User } ];
// Vue 3 示例 
const routes = [ { path: '/user/:id', name: 'User', component: User } ];
2. 获取动态路由参数

通过 $route.params 可以访问路由参数:

// Vue 2 和 Vue 3 示例 
export default { created() { console.log(this.$route.params.id); // 获取动态路由参数 } };

五、嵌套路由

嵌套路由是指在一个父组件中嵌套显示子组件的路由。Vue 2 和 Vue 3 的嵌套路由配置方式相似,主要区别在于 Vue 3 使用了 createRouter

1. 配置嵌套路由
// Vue 2 示例 
const routes = [ { path: '/parent', component: Parent, children: [ { path: 'child', component: Child } ] } ];
// Vue 3 示例 
const routes = [ { path: '/parent', component: Parent, children: [ { path: 'child', component: Child } ] } ];
2. 在父组件中使用 <router-view>
<!-- Vue 2 和 Vue 3 示例 --> 
<template> 
    <div> <router-view></router-view> <!-- 渲染子路由 --> </div> 
</template>

六、路由懒加载

为了提高应用的性能,Vue Router 支持路由懒加载。当路由被访问时,才加载对应的组件。

1. Vue 2 中的懒加载
const Home = () => import('@/components/Home'); 
const About = () => import('@/components/About');
2. Vue 3 中的懒加载
const Home = () => import('@/components/Home'); 
const About = () => import('@/components/About');

七、路由跳转

Vue Router 提供了两种方式来进行路由跳转:通过编程式导航和声明式导航。

1. 编程式导航
// Vue 2 和 Vue 3 示例 
this.$router.push('/about');
2. 声明式导航
<!-- Vue 2 和 Vue 3 示例 --> 
<router-link to="/about">Go to About</router-link>

总结

Vue 2 和 Vue 3 中的路由大部分功能相似,但 Vue 3 使用了新的 API,例如 createRoutercreateWebHistory,并且 Vue 3 中的路由配置更加简洁和灵活。掌握 Vue Router 的基本用法和进阶技巧,能帮助我们构建更加流畅和高效的单页面应用。

希望这篇博客对你有所帮助,欢迎在评论区分享你的想法或提出问题!


http://www.kler.cn/a/566720.html

相关文章:

  • openinstall支持鸿蒙App Linking:赋能系统级深度链接能力
  • UniApp 使用 u-loadmore 完整步骤
  • Elasticsearch:过滤 HNSW 搜索,快速模式
  • AI岗位面试指南:高频文档问题解析与应答策略
  • VMWare虚拟机Ubuntu Desktop怎么共享文件夹
  • Spring Boot 整合 Apollo 配置中心实战
  • react 路由跳转的几种方式
  • element-ui infiniteScroll 组件源码分享
  • 三轴加速度推算姿态角的方法,理论分析和MATLAB例程
  • Linux网络数据包接收:原理、流程与优化策略
  • Linux:同步
  • 【微知】git log如何将每次提交按照一行查看?(git log --oneline)
  • unity lua属性绑定刷新
  • C++ 设计模式 十一:代理模式 (读书 现代c++设计模式)
  • MySQL 和 Elasticsearch 之间的数据同步
  • docker里面pgadmin4自动备份pg数据库操作
  • NIM平台开发基于提示工程的大语言模型(LLM)应用
  • 笔记20250225
  • IP-----双重发布
  • 使用PDFMiner.six解析PDF数据