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

vue2和vue3路由封装及区别

Vue 2 和 Vue 3 在路由封装方面有一些区别,主要体现在 Vue Router 版本的升级(Vue Router 3 -> Vue Router 4)上。下面我们来对比一下 Vue 2 和 Vue 3 在路由封装上的主要区别,并提供相应的代码示例。


1. Vue 2 路由封装(基于 Vue Router 3)

Vue 2 使用 Vue.use(VueRouter) 注册路由,并且 new VueRouter({}) 创建路由实例。

安装 Vue Router 3

npm install vue-router@3

router/index.js(Vue 2 版)

import Vue from "vue";
import VueRouter from "vue-router";
import Home from "@/views/Home.vue";
import About from "@/views/About.vue";Vue.use(VueRouter);const routes = [{path: "/",name: "Home",component: Home,},{path: "/about",name: "About",component: About,},
];const router = new VueRouter({mode: "history",base: process.env.BASE_URL,routes,
});export default router;

main.js(Vue 2 版)

import Vue from "vue";
import App from "./App.vue";
import router from "./router";Vue.config.productionTip = false;new Vue({router, // 挂载路由render: (h) => h(App),
}).$mount("#app");

2. Vue 3 路由封装(基于 Vue Router 4)

Vue 3 需要使用 createRoutercreateWebHistory 创建路由,并且 app.use(router) 挂载。

安装 Vue Router 4

npm install vue-router@4

router/index.js(Vue 3 版)

import { createRouter, createWebHistory } from "vue-router";
import Home from "@/views/Home.vue";
import About from "@/views/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(Vue 3 版)

import { createApp } from "vue";
import App from "./App.vue";
import router from "./router";const app = createApp(App);app.use(router); // 挂载路由
app.mount("#app");

3. Vue 2 和 Vue 3 路由封装的主要区别

对比项Vue 2 (Vue Router 3)Vue 3 (Vue Router 4)
路由注册Vue.use(VueRouter)createRouter() + app.use(router)
路由实例创建new VueRouter({})createRouter({})
路由模式mode: 'history' / mode: 'hash'history: createWebHistory() / createWebHashHistory()
router.beforeEach直接使用 router.beforeEach直接使用 router.beforeEach
this.$router组件内部可用组件内部可用
this.$route组件内部可用组件内部可用
router.push()this.$router.push('/about')this.$router.push('/about')

4. 路由守卫封装

Vue 2 全局前置守卫

router.beforeEach((to, from, next) => {if (to.meta.requiresAuth && !isAuthenticated()) {next("/login");} else {next();}
});

Vue 3 全局前置守卫(写法一致)

router.beforeEach((to, from, next) => {if (to.meta.requiresAuth && !isAuthenticated()) {next("/login");} else {next();}
});

5. 动态路由注册

Vue 2 添加动态路由

router.addRoutes([{path: "/dynamic",name: "Dynamic",component: () => import("@/views/Dynamic.vue"),},
]);

Vue 3 添加动态路由(不同)

router.addRoute({path: "/dynamic",name: "Dynamic",component: () => import("@/views/Dynamic.vue"),
});

6. 路由懒加载

Vue 2 和 Vue 3 的路由懒加载写法基本相同:

const routes = [{path: "/",name: "Home",component: () => import("@/views/Home.vue"),},
];

7. setup 中使用路由(Vue 3 专属)

Vue 3 组合式 API 使用 useRouteruseRoute 访问路由:

import { useRouter, useRoute } from "vue-router";
import { onMounted } from "vue";export default {setup() {const router = useRouter();const route = useRoute();onMounted(() => {console.log("当前路径:", route.path);});const goToHome = () => {router.push("/");};return { goToHome };},
};

8. 结论

  • Vue 3 需要使用 createRouter,不再使用 Vue.use(VueRouter)
  • Vue 3 需要 app.use(router) 挂载,而 Vue 2 在 new Vue({ router }) 中挂载。
  • Vue 3 组合式 API 可以用 useRouteruseRoute 获取路由信息,Vue 2 仍使用 this.$routerthis.$route
  • addRoutes 改为 addRoute,但功能类似。

总体来说,Vue 3 使路由 API 变得更加模块化,适配了 setup 语法,但大多数核心概念和 Vue 2 保持一致。

你是要封装 Vue 3 版本的路由吗?还是希望对 Vue 2 的封装进行优化?

相关文章:

vue2和vue3路由封装及区别

Vue 2 和 Vue 3 在路由封装方面有一些区别,主要体现在 Vue Router 版本的升级(Vue Router 3 -> Vue Router 4)上。下面我们来对比一下 Vue 2 和 Vue 3 在路由封装上的主要区别,并提供相应的代码示例。 1. Vue 2 路由封装&#…...

Windows 系统下使用 Ollama 离线部署 DeepSeek - R1 模型指南

引言 随着人工智能技术的飞速发展,各类大语言模型层出不穷。DeepSeek - R1 凭借其出色的语言理解和生成能力,受到了广泛关注。而 Ollama 作为一款便捷的模型管理和部署工具,能够帮助我们轻松地在本地环境中部署和使用模型。本文将详细介绍如…...

性能测试网络风险诊断有哪些?

目录 一、网络定位分析手段 二、sar命令 三、netstat命令 以下是几种常见的网络风险诊断方法 网络连通性检查 带宽与延迟测量 丢包率分析 网络拓扑结构审查 安全设备影响评估 协议层面上的优化 负载均衡器效能检验 云化服务架构下的特殊考量 系统应用之间的交换&am…...

八股文 (一)

文章目录 项目地址一、前端1.1 大文件上传,预览1.2 首页性能优化1.2 流量染色,灰度发布1.3 Websock心跳机制,大数据实时数据优化1.4 Gpu 加速 fps优化1.5 echarts包大小优化和组件封装1.6 前端监控系统1.7 超大虚拟列表卡顿1. 实现2. 相关问题(1) 什么是虚拟化列表,为什么要…...

TVM调度原语完全指南:从入门到微架构级优化

调度原语 在TVM的抽象体系中,调度(Schedule)是对计算过程的时空重塑。每一个原语都是改变计算次序、数据流向或并行策略的手术刀。其核心作用可归纳为: 优化目标 max ⁡ ( 计算密度 内存延迟 指令开销 ) \text{优化目标} \max…...

c语言进阶(简单的函数 数组 指针 预处理 文件 结构体)

c语言补充 格式 void函数头 {} 中的是函数体 sum函数名 &#xff08;&#xff09; 参数表 #include <stdio.h>void sum(int begin, int end) {int i;int sum 0;for (i begin ; i < end ; i) {sum i;}printf("%d到%d的和是%d\n", begin, end, sum); …...

终极版已激活!绿话纯净,打开即用!!!

今天我想和大家聊聊一个非常实用的工具——视频转换大师最终版。 视频转换大师终极版&#xff0c;堪称一款全能型的视频制作神器&#xff0c;集视频转换与编辑功能于一体。它搭载的视频增强器技术&#xff0c;能够最大限度地保留原始视频质量&#xff0c;甚至还能实现质量的进…...

Vue.js 什么是 Composition API?

Vue.js 什么是 Composition API&#xff1f; 今天我们来聊聊 Vue 3 引入的一个重要特性&#xff1a;组合式 API&#xff08;Composition API&#xff09;。如果你曾在开发复杂的 Vue 组件时感到代码难以维护&#xff0c;那么组合式 API 可能正是你需要的工具。 什么是组合式 …...

MySQL高可用

一、mysql路由 1.利用路由器的连接路由特性&#xff0c;用户可以编写应用程序来连接到路由器&#xff0c;并令路由器使用响应的路由策略来处理连接来使其连接到正确的mysql数据库服务器 2.mysql route的部署方式 需要在所有数据库主机之外再打开一台主机mysql-router 配置mysql…...

30.Word:设计并制作新年贺卡以及标签【30】

目录 NO1.2 NO3邮件合并-信函 NO4邮件合并-标签​ NO1.2 另存为/F12&#xff1a;考生文件夹&#xff1a;Word.docx布局→页面设置对话框→页边距&#xff1a;上下左右→纸张&#xff1a;宽度/高度&#xff08;先调页边距&#x1f197;&#xff09;设计→页面颜色→填充效果→…...

Flink2支持提交StreamGraph到Flink集群

最近研究Flink源码的时候&#xff0c;发现Flink已经支持提交StreamGraph到集群了&#xff0c;替换掉了原来的提交JobGraph。 新增ExecutionPlan接口&#xff0c;将JobGraph和StreamGraph作为实现。 Flink集群Dispatcher也进行了修改&#xff0c;从JobGraph改成了接口Executio…...

大模型本地化部署(Ollama + Open-WebUI)

文章目录 环境准备下载Ollama模型下载下载Open-WebUI 本地化部署的Web图形化界面本地模型联网查询安装 Docker安装 SearXNG本地模型联网查询 环境准备 下载Ollama 下载地址&#xff1a;Ollama网址 安装完成后&#xff0c;命令行里执行命令 ollama -v查看是否安装成功。安装成…...

C++哈希(链地址法)(二)详解

文章目录 1.开放地址法1.1key不能取模的问题1.1.1将字符串转为整型1.1.2将日期类转为整型 2.哈希函数2.1乘法散列法&#xff08;了解&#xff09;2.2全域散列法&#xff08;了解&#xff09; 3.处理哈希冲突3.1线性探测&#xff08;挨着找&#xff09;3.2二次探测&#xff08;跳…...

IME关于输入法横屏全屏显示问题-Android14

IME关于输入法横屏全屏显示问题-Android14 1、输入法全屏模式updateFullscreenMode1.1 全屏模式判断1.2 全屏模式布局设置 2、应用侧关闭输入法全屏模式2.1 调用输入法的应用设置flag2.2 继承InputMethodService.java的输入法应用覆盖onEvaluateFullscreenMode方法 InputMethod…...

网络工程师 (11)软件生命周期与开发模型

一、软件生命周期 前言 软件生命周期&#xff0c;也称为软件开发周期或软件开发生命周期&#xff0c;是指从软件项目的启动到软件不再被使用为止的整个期间。这个过程可以细分为多个阶段&#xff0c;每个阶段都有其特定的目标、任务和产出物。 1. 问题定义与需求分析 问题定义…...

【人工智能】基于Python的机器翻译系统,从RNN到Transformer的演进与实现

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 机器翻译(Machine Translation, MT)作为自然语言处理领域的重要应用之一,近年来受到了广泛的关注。在本篇文章中,我们将详细探讨如何使…...

网络工程师 (12)软件开发与测试

一、软件设计 &#xff08;一&#xff09;定义与目的 软件设计是从软件需求出发&#xff0c;设计软件的整体结构、功能模块、实现算法及编写代码的过程&#xff0c;旨在确定系统如何完成预定任务。其目标是确保目标系统能够抽象、普遍地完成预定任务&#xff0c;并为后续的软件…...

3.Spring-事务

一、隔离级别&#xff1a; 脏读&#xff1a; 一个事务访问到另外一个事务未提交的数据。 不可重复读&#xff1a; 事务内多次查询相同条件返回的结果不同。 幻读&#xff1a; 一个事务在前后两次查询同一个范围的时候&#xff0c;后一次查询看到了前一次查询没有看到的行。 二…...

Python字典详解:从入门到实践

Python字典详解&#xff1a;从入门到实践 字典&#xff08;Dictionary&#xff09;是Python中最重要且最常用的数据结构之一。本文将深入讲解字典的特性、操作方法和实际应用案例。 1. 字典简介 字典是可变的、无序的键值对集合&#xff0c;使用{}创建。每个元素由key: valu…...

91,【7】 攻防世界 web fileclude

进入靶场 <?php // 包含 flag.php 文件 include("flag.php");// 以高亮语法显示当前文件&#xff08;即包含这段代码的 PHP 文件&#xff09;的内容 // 方便查看当前代码结构和逻辑&#xff0c;常用于调试或给解题者提示代码信息 highlight_file(__FILE__);// 检…...

CentOS8实战:ZeroTier构建安全异地虚拟局域网

1. 为什么选择ZeroTier替代传统内网穿透方案 最近在帮朋友搭建远程办公环境时&#xff0c;遇到了一个典型问题&#xff1a;分布在三个不同物理位置的服务器需要像在同一个办公室内网那样互相访问。最初考虑使用FRP方案&#xff0c;但实测下来发现几个痛点&#xff1a;首先是带宽…...

AI Agent执行链路的安全机制:权限控制与沙箱隔离方案

AI Agent执行链路安全深度解析:权限控制与沙箱隔离全栈落地方案 摘要/引言 你有没有遇到过这些场景:刚上线的企业内部运维Agent被恶意Prompt注入后,直接调用了删除生产库的工具;你做的数据分析Agent被诱导执行了恶意Python代码,把公司的用户隐私数据传到了境外黑客服务器…...

Biomni:生物医学图像分析从入门到精通,AI与传统CV融合实战

1. 项目概述&#xff1a;当AI学会“看”懂生物医学图像如果你在生物医学研究、药物发现或者临床诊断领域工作&#xff0c;大概率会和我一样&#xff0c;对海量的生物医学图像数据感到既兴奋又头疼。兴奋的是&#xff0c;这些图像——无论是显微镜下的细胞切片、组织病理学玻片&…...

合宙Air153C看门狗芯片:嵌入式系统可靠性的硬件守护方案

1. 项目概述&#xff1a;一颗“小而美”的国产看门狗芯片最近在做一个低功耗的户外监测设备项目&#xff0c;主控用的就是合宙的Air系列MCU。在调试过程中&#xff0c;最让我头疼的就是系统偶尔的“死机”问题。设备部署在野外&#xff0c;不可能每次都跑过去手动重启。正当我琢…...

ElevenLabs匈牙利语音API响应延迟飙升300%?内网穿透+CDN缓存+匈牙利语音素预加载三阶优化方案

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs匈牙利文语音API响应延迟飙升300%的现象复现与根因定位 近期多位开发者反馈&#xff0c;ElevenLabs API 在处理匈牙利语&#xff08;hu-HU&#xff09;文本转语音请求时&#xff0c;平均端到…...

汽车该多久换一代

汽车该多久换一代 买车的人其实不怕四年换代&#xff0c;怕的是刚提车半年就被新款打成旧款。李想这句话能引起讨论&#xff0c;原因也在这里&#xff1a;车企说的是研发验证周期&#xff0c;车主感受到的是价格、配置和二手残值。 汽车确实没法完全照着手机节奏跑。手机坏了可…...

智能合约如何重塑AI服务信任:去中心化执行与验证架构解析

1. 项目概述&#xff1a;当AI技能遇上智能合约最近在探索AI与区块链结合的前沿领域时&#xff0c;我遇到了一个非常有意思的项目&#xff1a;saralobo/skill-ai-execution-contract。这个名字乍一看有点复杂&#xff0c;但拆解开来&#xff0c;核心就是“技能”、“AI执行”和“…...

从技巧到工程:构建可维护的Prompt设计体系与实战指南

1. 项目概述&#xff1a;Prompt Engineering 的实战价值最近在 GitHub 上看到一个名为 “imJunaidAfzal/Prompt-Engineering” 的项目&#xff0c;这让我想起了过去一年里&#xff0c;和团队一起从零开始摸索大语言模型应用落地的经历。Prompt Engineering&#xff0c;中文常译…...

HSTracker:macOS平台炉石传说智能数据分析与决策辅助系统

HSTracker&#xff1a;macOS平台炉石传说智能数据分析与决策辅助系统 【免费下载链接】HSTracker A deck tracker and deck manager for Hearthstone on macOS 项目地址: https://gitcode.com/gh_mirrors/hs/HSTracker HSTracker是一款专为macOS平台设计的炉石传说智能套…...

MongoDB 4.4+ 版本后,手把手教你搞定mongodump独立安装与配置(附环境变量设置)

MongoDB 4.4独立工具链部署指南&#xff1a;从零构建mongodump备份环境 当你在全新的Linux服务器上部署了MongoDB 4.4或更新版本&#xff0c;准备执行例行数据库备份时&#xff0c;在终端输入熟悉的mongodump命令却只得到command not found的响应——这不是你的操作失误&#…...