vue 不完美的多标签页存在问题及解决方案_vue.js

然而,这个方案存在几个问题:

如果给路由添加参数,打开第一次没有任何问题,但如果换另一个参数打开,还会是之前的页面,因为组件被缓存下来了。

新增一个路由 counter,在页面上添加RouterLink,并使用不同的参数

然后再Counter组件中获取id参数,分别点击Counter 1和Counter 2,会发现点击Counter 1时获取到的id是1,点击Counter 2时却没有任何变化,而且两个RouterLink同时是激活状态。

添加一个组件测试生命周期:

先从Home切换到About再切换回Home再切换回About。

查看在不使用KeepAlive切换页面时候的输出,onBeforeMount -> onMounted -> onBeforeUnmount -> onUnMounted 循环

使用KeepAlive的情况,情况就复杂很多,每次切换到页面时会激活onActivated钩子,正常情况下可以通过onActivated钩子获取路由参数,重新获取数据。

问题在于:如果组件可以在缓存与不缓存中切换,在获取数据时,需要考虑是写在onMounted里还是onActivated里,写在onMounted中时如果组件会被服用,需要处理路由参数变化重新获取数据;写在onActivated里,需要考虑组件不缓存了钩子函数不会被调用的情况。

这个问题很好解决,只需要给KeepAlive中的component加上不同的key就可以实现,key可以通过router.fullPath来计算,这样KeepAlive中就可以缓存同一个组件多次。

同时,修改下Counter组件,查看生命周期

会发现,虽然是同一个组件,但生命周期也独立了,也就不需要考虑路由参数变化时重新获取数据,只需要在onMounted时获取一次数据就可以了。

上面的问题好像一下就解决了,但第三个目标没有实现,这也是最难的一个问题。

KeepAlive可以通过给component添加不同的key达到路由多开的效果,但是却不能用key删除,KeepAlive只能通过exclude参数使用组件名称删除缓存。

这下问题麻烦了,虽然使用不同的key多开了路由,但路由的组件名称是相同的,也就是说,就算能多开了,关闭却只能全部关闭,这种是不行的。

思索后,想到了下面的方案:

编写一个TagView组件,替代RouterView+KeepAlive,关闭的时候直接删除tagView就可以

样式随便写的,明白意思就好。

优点:编写起来很简单

缺点:之前的组件一直保留,打开的页面多了可能会卡

总结:也算一种可行的方案,但要注意页面不能太多

之前的组件只是display: none了

上面其实解决了最大的问题,但是还可以优化一下,可以利用KeepAlive卸载dom并缓存。

基于上面的方案,在Component外面再套一层KeepAlive,然后将v-show改成v-if。

这样就解决了打开页面太多可能会导致的性能问题,但是在DevTool中就会看到很多个KeepAlive了,这也是一种取舍吧。

上面的解决方案并不完美,要么容易影响性能,要么可能会影响开发(多个KeepAlive在DevTool里),要完美的话估计只能自己实现一个KeepAlive了。


本文地址: https://www.earthnavs.com/jishuwz/9210410b33e764c0aa03.html
全局中部横幅
豆瓣

提供图书、电影、音乐唱片的推荐、评论和价格比较,以及城市独特的文化生活。

Feeder

该站点未添加描述description...

百度热搜

百度热搜以数亿用户海量的真实数据为基础,通过专业的数据挖掘方法,计算关键词的热搜指数,旨在建立权威、全面、热门、时效的各类关键词排行榜,引领热词阅读时代。

金泉翱联网

金泉翱联网精心聚合最新的网站相关知识信息,全力打造出一个全新的网站平台资源整合体。在这里,为您提供全网范围内各类问题的解答,还有丰富的天气资讯、文学辞典、历史知识以及实用的生活小常识等内容。

飞天下载系统,FTDMS,下载系统,素材管理系统,CMS系统

下载系统-CMS内容管理,素材下载产品及解决方案提供商

域名代理注册

ResellerClub-域名主机提供商,19年行业经验,专业提供域名注册,虚拟主机,云虚拟主机,独立服务器,VPS主机,企业邮局,自助建站,SSL数字证书,网站安全备份等产品。全球域名注册商前十强,200,000家域名主机商的第一选择!

800+热门手游下载推荐

魔玩游戏网为您推荐800+热门好玩的手机游戏、高人气经典单机游戏和网络游戏、常用游戏软件辅助工具;手游排行榜,手游福利,优惠礼包码,游戏攻略教程,玩BT手游必备游戏盒子APP下载!

识酷吧导航

识库吧导航(shikuba.cn)提供高效便捷的网站分类导航服务,涵盖学术、工具、设计、娱乐等领域的优质站点。每日人工审核更新,助您快速发现实用资源,提升工作效率与学习体验。免费、无广告、一键直达!

厂家网

厂家网(www.changjiawang.cn)收录了全国各行业生产厂家简介信息,有联系电话、工厂地址、网址等,供用户免费查询使用,是一个专业的工厂货源推广平台!

站长导航网

站长导航网系统是一个专业收录优质网站的网址导航平台,提供简洁高效的网络入口。免费提交收录,发现实用工具、设计资源、程序员必备站,打造您的专属上网主页