多路由复用页面组件问题

简介: 多路由复用页面组件问题

场景复现


项目中经常会遇到增改查的需求,通常采用不同的路由指向同一个页面组件,以此到达复用页面的功能,但是复用页面存在一些状态问题。


以下情况均不缓存页面:


分两种情况,均为动态路由匹配


  • (1) 路由a: /detail/1, 路由b: /detail/2 。   路由表里匹配/detail/:id
  • (2) 路由A: /new-detail/1, 路由B: /edit-detail/1 。 路由表里匹配/new-detail/:id, 和  /edit-detail/:id


这四个不同的url,注册的是同一个页面组件


在场景(1)中,切换页面,只调用beforeRouteUpdate钩子函数,不调用beforeRouteEnter、mounted等,可以监听到$route,并获取到激活组件里面的数据,不会错乱


在场景(2)中,切换页面,调用beforeRouteEnter钩子函数,不调用created、mounted等生命周期钩子


beforeRouteUpdate重用的组件官方解释(指的是动态路由匹配)


在当前路由改变,但是该组件被复用时调用,举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1/foo/2 之间跳转的时候


动态路由匹配


文档请看这里


响应路由参数的变化


当使用路由参数时,例如从 /user/foo 导航到 /user/bar,原来的组件实例会被复用。因为两个路由都渲染同个组件,比起销毁再创建,复用则显得更加高效。不过,这也意味着组件的生命周期钩子不会再被调用。


复用组件时,想对路由参数的变化作出响应的话,有两种方法


  1. watch (监测变化) $route 对象


  1. 使用 2.2 中引入的 beforeRouteUpdate 导航守卫


使用beforeRouteUpdate的时候,如果路由里面通布尔模式props: true将组件和路由解耦,这个时候会出现props获取错误的情况,比方说从/foo/1页面切换到/foo/2页面的时候,在beforeRouteUpdate获取到的还是失活页面组件的id

image.png

beforeRouteUpdate钩子中,在next回调函数中编写代码并没有执行,仿佛没有调用,但是去掉next(),路由就不会放行,有点奇怪。需要阅读源码实现逻辑...


完整的导航解析流程


  1. 导航被触发
  2. beforeRouteLeave(失活组件里调用) 可以访问组件实例 this
  3. beforeEach(全局前置钩子)
  4. beforeRouteUpdate(如果是重用组件,则调用) 可以访问组件实例 this
  5. beforeEnter(路由配置里,路由独享的)
  6. 解析异步路由组件(如果有)
  7. beforeRouteEnter(被激活组件里调用)
  8. beforeResolve(全局解析守卫)
  9. 导航被确认
  10. afterEach(全局后置钩子)
  11. 触发 DOM 更新。
  12. beforeRouteEnter (调用守卫中传给 next 的回调函数,创建好的组件实例会作为回调函数的参数传入。next(vm) => {})


接着调用created、mounted等等

目录
相关文章
|
JavaScript
TypeScript中模块的导入与导出技术详解
【4月更文挑战第23天】TypeScript模块化通过`export`和`import`实现代码组织。导出包括变量、函数、类、接口,支持命名导出和默认导出。导入时,命名导出使用花括号指定成员,默认导出直接引用,还可使用`as`重命名。模块机制促进代码复用、解耦,提升可维护性。理解并运用这些技术对构建大型应用至关重要。
|
存储 JavaScript 前端开发
揭秘Vue 2中的$nextTick:等待DOM更新的神奇时刻!
揭秘Vue 2中的$nextTick:等待DOM更新的神奇时刻!
|
3月前
|
安全 Linux 数据安全/隐私保护
深入理解Linux ln命令:软链接与硬链接的完全指南
本文深入解析Linux中`ln`命令的使用,涵盖硬链接与软链接的核心区别、基本语法、常用选项及实际应用场景。通过示例讲解链接创建、批量操作、版本管理等技巧,并提供注意事项与故障排除方法,帮助用户高效、安全地管理文件链接,提升系统操作效率。(238字)
395 0
|
7月前
|
JSON 监控 前端开发
AMIS:百度开源的前端低代码神器,18.4k star 背后的开发效率提升利器
AMIS(前端低代码框架)是百度开源的低代码前端框架,基于纯 JSON 配置即可生成完整后台页面,包括表单、表格、图表、CRUD 列表,支持可视化拖拽编辑。,星标数已达 18.4k,百度内部已沉淀超过 5 万个页面,广泛应用于审核系统、数据管理后台、模型监控等落地场景
1304 0
|
6月前
|
数据可视化 前端开发 数据管理
什么是低代码?一文看懂:低代码技术的发展历程及技术架构
低代码开发平台通过可视化界面与组件化设计,大幅降低编程门槛,使开发者无需大量编码即可快速构建应用。它具备可视化开发、预制组件、低技术门槛及全流程支持等核心特征,适用于业务流程自动化、数据管理、客户关系管理等多种场景。自萌芽期至今,低代码不断演进,成为企业数字化转型的重要工具,显著提升开发效率、降低成本,并推动全民开发者时代的到来。
1021 0
什么是低代码?一文看懂:低代码技术的发展历程及技术架构
|
JavaScript 前端开发 数据安全/隐私保护
【vue】 前端vue2 全局水印效果
【vue】 前端vue2 全局水印效果
1014 1
|
定位技术 API 数据格式
Element UI【详解】el-cascader 级联选择器 - 行政区划选择(可以选择任意一级),限定选择范围,获取并解析选中的节点
Element UI【详解】el-cascader 级联选择器 - 行政区划选择(可以选择任意一级),限定选择范围,获取并解析选中的节点
3876 0
【合并单元格】纵向合并单元格之前对数组处理【针对饿了么element的table的span-method合并行或列的计算方法】
【合并单元格】纵向合并单元格之前对数组处理【针对饿了么element的table的span-method合并行或列的计算方法】
|
JavaScript 前端开发 Java
vue-cli-service的命令行参数
在一个 Vue CLI 项目中,@vue/cli-service 安装了一个名为 vue-cli-service 的命令。你可以在 npm scripts 中以 vue-cli-service、或者从终端中以 ./node_modules/.bin/vue-cli-service 访问这个命令
UE Http Server 插件说明
UE Http Server 插件说明
866 0

热门文章

最新文章