Vue Router进阶详解
导航守卫
若依框架登录鉴权详解(动态路由)_若依鉴权-CSDN博客
完整的导航解析流程
导航被触发:
- 当用户点击页面中的链接、使用编程式导航(如
router.push
或router.replace
)或手动输入URL时,导航流程被触发。在失活的组件里调用
beforeRouteLeave
守卫:
- 如果当前有激活的组件(即用户正在查看的组件),则在该组件内调用
beforeRouteLeave
守卫。这允许组件在离开之前执行一些清理工作或条件检查(如用户是否保存了更改)。调用全局
beforeEach
守卫:
- 在路由实例上注册的全局
beforeEach
守卫会在导航确认之前被调用。这是一个全局的钩子,可以用于执行一些通用的检查或处理逻辑,如身份验证。在复用组件里调用
beforeRouteUpdate
守卫(Vue Router 2.2+):
- 如果目标路由和当前路由使用相同的组件,并且只是参数发生了变化(如从一个用户页面导航到另一个用户页面,但两者都使用相同的
User
组件),则会在该组件内调用beforeRouteUpdate
守卫。这允许组件在参数变化时更新其内容。调用路由配置里的
beforeEnter
守卫:
- 在路由配置对象中定义的
beforeEnter
守卫会在导航到该路由之前被调用。这是一个路由独享的钩子,可以用于在该路由上执行一些特定的逻辑。解析异步路由组件:
- 如果目标路由是一个异步组件,则此时会解析该异步组件。
在被激活的组件里调用
beforeRouteEnter
守卫:
- 在目标路由对应的组件内调用
beforeRouteEnter
守卫。这允许组件在渲染之前执行一些初始化工作。需要注意的是,此时组件实例尚未被创建,因此无法访问this
。但可以通过向next
函数传递一个回调函数来访问组件实例。调用全局
beforeResolve
守卫(Vue Router 2.5+):
- 在导航被确认之前,并且在所有组件内守卫和异步路由组件被解析之后,调用全局
beforeResolve
守卫。这是一个全局的钩子,可以用于在导航确认之前执行一些额外的逻辑。导航被确认:
- 此时,所有的守卫和钩子都已经被调用,并且没有守卫中断导航。路由实例现在会确认导航,并准备更新DOM。
调用全局
afterEach
钩子:
- 在导航完成后调用全局
afterEach
钩子。这是一个全局的钩子,不会接受next
函数,也不会改变导航本身。它主要用于记录导航的详细信息或执行一些清理工作。触发DOM更新:
- Vue Router会根据目标路由渲染相应的组件,并更新DOM以反映新的视图。
用创建好的实例调用
beforeRouteEnter
守卫中传给next
的回调函数:
- 如果在
beforeRouteEnter
守卫中向next
函数传递了一个回调函数,则此时会调用该回调函数,并将组件实例作为参数传递给它。这允许组件在渲染之后执行一些后续工作。
全局守卫(router.beforeEach与router.afterEach)
全局守卫是作用于整个Vue应用的守卫,它们会在任意路由发生改变时被调用。全局守卫主要包括全局前置守卫(router.beforeEach
)和全局后置守卫(router.afterEach
)。
- 全局前置守卫:在路由跳转之前执行,可以通过调用
router.beforeEach
方法注册。这些守卫会按照注册顺序依次执行,并且每个守卫都有机会中断导航过程。如果守卫函数返回false
或调用next(false)
,则导航会被中断。如果守卫函数不调用next()
或调用next('/')
、next({ ... })
进行重定向,则导航也会中断。 - 全局后置守卫:在导航完成后被调用,不接受
next
函数也不可以中断导航。它们主要用于做一些清理工作或者修改状态。
router.beforeEach((to, from, next) => {NProgress.start()if (getToken()) {//获取路由的mata.title属性,并存储在Vuex中to.meta.title && store.dispatch('settings/setTitle', to.meta.title)/* has token*/if (to.path === '/login') {next({ path: '/' })NProgress.done()} else {if (store.getters.roles.length === 0) {isRelogin.show = true// 判断当前用户是否已拉取完user_info信息store.dispatch('GetInfo').then(() => {isRelogin.show = falsestore.dispatch('GenerateRoutes').then(accessRoutes => {// 根据roles权限生成可访问的路由表console.log(accessRoutes);router.addRoutes(accessRoutes) // 动态添加可访问路由表//通过返回新的位置来触发重定向next({ ...to, replace: true }) // hack方法 确保addRoutes已完成})}).catch(err => {store.dispatch('LogOut').then(() => {Message.error(err)next({ path: '/' })})})} else {next()}}} else {// 没有tokenif (whiteList.indexOf(to.path) !== -1) {// 在免登录白名单,直接进入next()} else {next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页NProgress.done()}}
})router.afterEach(() => {NProgress.done()
})
路由独享守卫(beforeEnter)
是作用于单个路由或一组路由的守卫,可以在路由配置中直接定义。这种守卫允许开发者针对特定的路由实施一些逻辑,例如验证用户是否有权限访问某个页面。路由独享守卫只有一个钩子函数beforeEnter
,它会在进入路由时触发,不会在参数、查询字符串或哈希值改变时触发。
组件内守卫(beforeRouteEnter
、beforeRouteUpdate
和beforeRouteLeave
。)
组件内守卫是作用于路由组件内的守卫,只能在路由组件中使用。这些守卫允许开发者在组件的生命周期钩子中控制路由导航。组件内守卫包括beforeRouteEnter
、beforeRouteUpdate
和beforeRouteLeave
。
- beforeRouteEnter:在组件被创建之前调用,此时组件实例尚未被创建,因此无法访问
this
。可以通过向next
函数传递一个回调函数来访问组件实例。 - beforeRouteUpdate:在当前路由改变,但是该组件被复用时调用。例如,对于一个带有动态参数的路径
/foo/:id
,在/foo/1
和/foo/2
之间导航时,同一个Foo
组件实例会被复用,此时会调用beforeRouteUpdate
守卫。 - beforeRouteLeave:在导航离开该组件的对应路由时被调用。它可用于在离开路由前进行一些操作,比如保存用户编辑的内容或询问用户是否确定离开。
动态路由
- 权限管理:在应用中,不同用户可能有不同的访问权限。通过动态路由,我们可以在用户登录后根据其权限动态添加或删除路由,从而控制用户对不同页面的访问。
- 模块懒加载:对于大型应用,为了优化性能,我们可以按需加载不同模块的路由。在用户访问某个模块时,再动态添加该模块的路由配置。
- 动态生成菜单:在一些后台管理系统中,菜单项和对应的路由可能是动态生成的。我们可以根据后台返回的菜单配置,动态生成对应的路由。
const router = createRouter({history: createWebHistory(),routes: [{ path: '/:articleName', component: Article }],
})
router.addRoute({ path: '/about', component: About })
//页面仍然会显示 Article 组件,我们需要手动调用 router.replace() 来改变当前的位置,并覆盖我们原来的位置
router.addRoute({ path: '/about', component: About })
// 我们也可以使用 this.$route 或 useRoute()
router.replace(router.currentRoute.value.fullPath)
在导航守卫中添加路由
如果你决定在导航守卫内部添加或删除路由,你不应该调用 router.replace()
,而是通过返回新的位置来触发重定向:
store.dispatch('GenerateRoutes').then(accessRoutes => {// 根据roles权限生成可访问的路由表console.log(accessRoutes);router.addRoutes(accessRoutes) // 动态添加可访问路由表//通过返回新的位置来触发重定向next({ ...to, replace: true }) // hack方法 确保addRoutes已完成})
--------------------------------------------------------------------------
router.beforeEach(to => {if (!hasNecessaryRoute(to)) {router.addRoute(generateRoute(to))// 触发重定向return to.fullPath}
})
过渡效果
原生CSS中transation与animation
CSS中的Transition(过渡效果)和Animation(动画)是实现网页动态效果的重要技术,能够提升用户体验,使网页看起来更加生动和吸引人。以下是两者的详细介绍:
一、CSS Transition(过渡效果)
-
基本概念
CSS Transition允许元素从一种样式状态平滑地改变为另一种样式状态,通常用于简单的动态效果,如按钮的悬停状态、元素的显示和隐藏等。
-
主要属性
- transition-property:指定应用过渡效果的CSS属性名称,如width、height、background-color等。也可以使用“all”来指定所有可动画属性。
- transition-duration:定义过渡效果完成所需的时间,单位可以是秒(s)或毫秒(ms)。
- transition-timing-function:描述过渡效果的速度曲线,如linear(线性)、ease(慢到快再到慢)、ease-in(慢到快)、ease-out(快到慢)和ease-in-out(慢到快再到慢,但比ease更平缓)。还可以使用cubic-bezier函数来自定义速度曲线。
- transition-delay:定义过渡效果开始前的延迟时间,单位同样可以是秒(s)或毫秒(ms)。
- transition:上述四个属性的简写形式,按顺序分别指定transition-property、transition-duration、transition-timing-function和transition-delay。
-
使用示例
.box { width: 100px; height: 100px; background-color: red; transition: width 1s ease-in-out; } .box:hover { width: 200px; }
当鼠标悬停在具有“.box”类的元素上时,元素的宽度会从100px平滑地过渡到200px,过渡效果持续1秒,采用缓入缓出的时间函数。
-
注意事项
- 过渡效果不会应用于display、visibility等少数CSS属性。
- 过渡效果在元素从不可见变为可见时不会触发,除非是通过改变opacity或其他可以产生类似效果的属性来实现可见性的变化。
- 如果过渡效果的目标值与起始值相同,过渡效果将不会触发。
- 过渡效果在元素或其父元素被隐藏(如display: none)时不会运行。
二、CSS Animation(动画)
-
基本概念
CSS Animation比Transition更为强大,它允许创建更复杂的动画效果,可以包含多个步骤和关键帧。
-
主要属性
- animation-name:指定要绑定到选择器的关键帧的名称。
- animation-duration:定义动画完成一个周期需要多少秒或毫秒。
- animation-timing-function:指定动画将如何完成一个周期,与Transition中的transition-timing-function类似,也可以使用cubic-bezier函数来自定义速度曲线。
- animation-delay:定义动画什么时候开始,单位可以是秒(s)或毫秒(ms),也可以是负值以表示跳过部分动画。
- animation-iteration-count:定义动画应该播放多少次,可以是具体次数或infinite(无限循环)。
- animation-direction:定义是否循环交替反向播放动画,如normal(正向播放)、reverse(反向播放)、alternate(交替正向和反向播放)等。
- animation-fill-mode:规定当动画不播放时(如动画完成时、有延迟未开始播放时)要应用到元素的样式,如none、forwards(动画结束时保持最后一帧的样式)等。
- animation-play-state:指定动画是否正在运行或已暂停。
- animation:上述属性的简写形式,按顺序分别指定各属性的值。
-
使用示例
.box-max { width: 100px; height: 100px; background-color: aqua; animation-name: box1; animation-duration: 3s; } @keyframes box1 { 0% { opacity: 1; } 100% { opacity: 0.3; } }
这个示例创建了一个名为“.box-max”的元素,并应用了一个名为“box1”的动画。动画使元素的透明度从1逐渐变为0.3,持续时间为3秒。
-
注意事项
- 使用Animation时,规需要配合@keyframes则来定义动画的关键帧。
- 动画的性能可能会受到多个因素的影响,如动画的复杂度、元素的数量等。因此,在使用动画时需要注意性能优化,如避免对大量元素同时应用复杂的动画效果。
Vue中transition
<transition>
组件会在其包裹的内容(一个元素或组件)进入和离开DOM时,自动应用过渡效果。这些过渡效果可以通过CSS过渡(transition)或CSS动画(animation)来实现。
常见属性
- name:用于指定过渡效果的名称。如果不指定,Vue会使用默认的类名前缀
v-
。指定后,Vue会使用指定的名称作为类名前缀,如fade-enter-active
。- mode:用于设置过渡的模式。可以是
in-out
(先完成当前元素的过渡,然后新元素开始过渡)或out-in
(先让当前元素过渡出去,然后新元素开始过渡)。默认是in-out
。- type:指定过渡效果的类型,可以是
transition
(CSS过渡)或animation
(CSS动画)。Vue 2.9.0+版本支持。如果不指定,Vue会根据元素的样式自动判断。- duration:设置过渡效果的持续时间,单位是毫秒。可以是一个固定的值,也可以是一个对象,分别指定进入和离开的持续时间。Vue 2.9.0+版本支持。
常见钩子
- before-enter:进入过渡之前调用。
- enter:进入过渡被触发时调用。
- after-enter:进入过渡结束后调用。
- enter-cancelled:在进入过渡被取消时调用(比如通过切换v-if条件来取消过渡)。
- before-leave:离开过渡之前调用。
- leave:离开过渡被触发时调用。
- after-leave:离开过渡结束后调用。
- leave-cancelled:在离开过渡被取消时调用。
为过渡命名
<Transition name="fade">...
</Transition>.fade-enter-active,
.fade-leave-active {transition: opacity 0.5s ease;
}.fade-enter-from,
.fade-leave-to {opacity: 0;
}
与原生CSS的transition一同使用
<Transition name="slide-fade"><p v-if="show">hello</p>
</Transition>/*进入和离开动画可以使用不同持续时间和速度曲线。
*/
.slide-fade-enter-active {transition: all 0.3s ease-out;
}.slide-fade-leave-active {transition: all 0.8s cubic-bezier(1, 0.5, 0.8, 1);
}.slide-fade-enter-from,
.slide-fade-leave-to {transform: translateX(20px);opacity: 0;
}
与原生animation一同使用
<Transition name="bounce"><p v-if="show" style="text-align: center;">Hello here is some bouncy text!</p>
</Transition>.bounce-enter-active {animation: bounce-in 0.5s;
}
.bounce-leave-active {animation: bounce-in 0.5s reverse;
}
@keyframes bounce-in {0% {transform: scale(0);}50% {transform: scale(1.25);}100% {transform: scale(1);}
}
深层级过渡与显式过渡时长
<Transition name="nested"><div v-if="show" class="outer"><div class="inner">Hello</div></div>
</Transition>/* 应用于嵌套元素的规则 */
.nested-enter-active .inner,
.nested-leave-active .inner {transition: all 0.3s ease-in-out;
}.nested-enter-from .inner,
.nested-leave-to .inner {transform: translateX(30px);opacity: 0;
}/* ... 省略了其他必要的 CSS *//*我们甚至可以在深层元素上添加一个过渡延迟,从而创建一个带渐进延迟的动画序列:*//* 延迟嵌套元素的进入以获得交错效果 */
.nested-enter-active .inner {transition-delay: 0.25s;
}
然而,这会带来一个小问题。默认情况下,<Transition>
组件会通过监听过渡根元素上的第一个 transitionend
或者 animationend
事件来尝试自动判断过渡何时结束。而在嵌套的过渡中,期望的行为应该是等待所有内部元素的过渡完成。
在这种情况下,你可以通过向 <Transition>
组件传入 duration
prop 来显式指定过渡的持续时间 (以毫秒为单位)。总持续时间应该匹配延迟加上内部元素的过渡持续时间
<Transition :duration="550">...</Transition><Transition :duration="{ enter: 500, leave: 800 }">...</Transition>
keep-alive& transition &router-view
<router-view v-slot="{ Component }"><transition><keep-alive><component :is="Component" /></keep-alive></transition>
</router-view>
相关文章:

Vue Router进阶详解
导航守卫 若依框架登录鉴权详解(动态路由)_若依鉴权-CSDN博客 完整的导航解析流程 导航被触发: 当用户点击页面中的链接、使用编程式导航(如router.push或router.replace)或手动输入URL时,导航流程被触发。…...

进程的控制
进程 task_struct mm_struct(虚拟地址空间) 页表 代码和数据 。 新建进程先有管理系统,然后才有代码和数据。 fork()函数:子进程返回0,父进程返回的是子进程的pid - - - 方便父进程对子进程标识。 进程终止:释放代码和数据占…...

基于C语言实现的图书管理系统
使用Visual Studio 2022编译工具进行编写代码的。 项目源码直接奉上: book1.h头文件: #ifndef __BOOK1_H //预处理用于条件编译 避免头文件反复包含 #define __BOOK1_H#include<stdio.h> #include <string.h> #include<stdlib.h> #include<stdbool.h&g…...

删除 需要来自XXXX的权限才能对此文件夹进行更改 文件的解决办法
如果你也是: 如果你也有类似上面的问题,这篇文章算是你看对了,哦哟! 我的牙齿现在是怨灵的牙齿,可以啃下一头牛。 翻遍千山万水,咱们也是终于取到真经了家人们。 首先下一个everything好吗 甩一个官网链…...

ARM base instruction -- ccmp (immediate)
Conditional Compare (immediate) sets the value of the condition flags to the result of the comparison of a register value and an immediate value if the condition is TRUE, and an immediate value otherwise. 此指令一般出现在 cmp 指令之后,表示双重比…...

高德 阿里231滑块 分析
声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 有相关问题请第一时间头像私信联系我删…...
Unity 的 WebGL 构建中资源图片访问方式
在 Unity 的 WebGL 构建中,资源图片是可以打包在 工程内部 使用的,前提是这些资源被正确地包含在构建中,并且能够通过合适的方式加载和访问。不同于传统的本地文件访问,WebGL 需要通过 Asset Bundles、Addressables 或 Resources …...

WinForms 中使用 MVVM 模式构建应用:实现登录页面、页面导航及 SQLite 数据库连接完整框架搭建过程
前言 在传统的 WinForms 应用程序开发中,很多开发者使用事件驱动的设计模式,直接将业务逻辑编写在界面代码中。然而,随着应用程序的复杂性增加,单一的界面文件变得臃肿,难以测试和维护。借鉴 WPF 中 MVVM(…...

Chrome调试工具(查看CSS属性)
来说说这个Chrome调试工具吧,梦回gdb,但是它没有gdb难 打开浏览器 有两种方式可以直接打开Chrome调试工具 直接按F12 鼠标右键页面 --- 检查元素 什么mc玩家是鸣潮 标签页含义 🤒 elements查看标签结构(展示html文件&#…...

MQTT从入门到精通之MQTT入门
MQTT入门 1 MQTT概述 1.1 MQTT简介 MQTT(Message Queuing Telemetry Transport)由IBM于1999年开发的一种基于**"发布订阅模式"的轻量级的消息传输协议**! 发布订阅模式是一种传统的客户端-服务器架构的替代方案,因为…...
Hadoop生态系统主要包括哪些组件以及它们的作用
Hadoop生态系统是一个开源的大数据处理框架,它主要由一系列组件构成,每个组件都承担着不同的功能和作用。以下是Hadoop生态系统的主要组件及其作用的详细解释: HDFS(Hadoop Distributed File System) 作用:…...
OpenResty 1.27.1.1 已经正式发布
OpenResty 1.27.1.1 已经正式发布,这是一个基于 NGINX 和 LuaJIT 的 web 平台。以下是关于此次发布的一些重点信息和更新内容: 下载与安装 你可以在此处下载最新版本的 OpenResty。提供了便携式源代码分发、Win32/Win64 二进制分发以及为 Ubuntu、Debi…...

定高虚拟列表:让大数据渲染变得轻松
定高虚拟列表 基本认识 在数据如潮水般涌来的今天,如何高效地展示和管理这些数据成为了开发者们面临的一大挑战,传统的列表渲染方式在处理大量数据时,往往会导致页面卡顿、滚动不流畅等问题,严重影响用户体验(在页面…...

python request与grequests该如何选择
requests & grequests requests 和 grequests 是Python中用于发送HTTP请求的不同库。requests 是一个同步、阻塞式库,而 grequests 是基于 requests 封装的异步非阻塞库,它利用了 gevent 库提供的协程机制,能够并发发送多个请求。 选择…...

Unity3D UI 拖拽
Unity3D 实现 UI 元素拖拽功能。 UI 拖拽 通常画布上的 UI 元素都是固定位置的,我们可以通过实现拖拽接口,让 UI 元素可以被拖拽到其他位置。 拖拽接口 创建一个脚本 UIDrag.cs,在默认继承的 MonoBehaviour 后面,再继承三个接…...
介绍一下memcpy(c基础)
memcpy函数void *memcpy(void *dest, const void *src, size_t n); dest:指向目标内存区域的指针,即复制的目的地。src:指向源内存区域的指针,即要被复制的内容的来源。n:要复制的字节数 主要功能是将src所指向的内存…...

【网络面试篇】HTTP(2)(笔记)——http、https、http1.1、http2.0
目录 一、相关面试题 1. HTTP 与 HTTPS 有哪些区别? 2. HTTPS 的工作原理?(https 是怎么建立连接的) (1)ClientHello (2)SeverHello (3)客户端回应 &a…...
python-23-一篇文章帮你理解Python推导式
python-23-一篇文章帮你理解Python推导式 一.简介 在 Python 中,推导式(Comprehensions)是一个简洁的语法,用于通过某种可迭代对象快速生成新的对象(如列表、字典、集合等!来开始我们今天的日拱一卒&…...

WPF中如何简单的使用CommunityToolkit.Mvvm创建一个项目并进行 增删改查
目录 开始前准备的数据库dbblog如下: 第一步:创建项目后下载四个NuGet程序包 第二步:删除原本的MainWindow.XAML文件 并创建如下的目录结构 然后在View文件夹下面创建Login.XAML和Main.XAML 并且在App.XAML中将启动项改为Login.X…...
CesiumJS 案例 P15:检测标记、鼠标点击移动标记、鼠标拖动标记
CesiumJS CesiumJS API:https://cesium.com/learn/cesiumjs/ref-doc/index.html CesiumJS 是一个开源的 JavaScript 库,它用于在网页中创建和控制 3D 地球仪(地图) 一、检测标记 <!DOCTYPE html> <html lang"en&…...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...

学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...