vue页面缓存后,切换菜单时页面数据显示错误

文章描述了一个在具有筛选功能的报表详情页面中遇到的问题,即切换菜单后返回,页面显示的不是筛选后的数据。原因可能是路由参数在切换过程中丢失,特别是在使用query传递参数时。keepalive的渲染导致两个不同query的页面缓存,从而引起数据错乱。解决方案是改用params进行路由跳转,避免query数据丢失。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:页面是一个具有筛选功能的报表详情页,对报表进行筛选后,切换菜单显示别的页面后,再次回到报表详情页后,页面显示初次进入页面时的数据,不是筛选后的数据
原因:经过多次测试发现多次切换路由和首次进入时,路由参数不一致,缺少query中数据,结合每当路由发送变化,keepalive的render方法都会重新渲染,在控制台用vue插件,发现生成了两个报表详情页的缓存,两个缓存的路径只有query数据的不同,所以偶尔会显示页面数据错乱。至于路由变化的原因还没找到,猜测是进入详情页时使用了query路由传参,多次切换菜单后,再次进入详情页,可能导致query参数丢失。
解决办法:把路由跳转改成params不使用query,即可

### Vue 页面切换的实现方式与路由导航 在 Vue.js 中,页面切换的核心依赖于 `Vue Router` 的使用。以下是关于 Vue 页面切换的具体方法及其相关技术细节: #### 1. 使用 `<router-link>` 进行页面跳转 通过定义路由实例和配置路由组件,在模板中利用 `<router-link>` 可以轻松实现页面之间的导航[^1]。 ```html <router-link to="/about">About</router-link> ``` 上述代码片段展示了如何创建一个链接到 `/about` 路径的按钮。点击该链接会触发路由变化并加载对应的组件。 #### 2. 动态路由参数传递 除了基本的路径匹配外,还可以通过动态路由参数来增强灵活性。例如,访问某个用户的详情页可以通过以下方式进行设置: ```javascript const routes = [ { path: '/user/:id', component: User } ]; ``` 当用户访问 `/user/123` ,`:id` 将被解析为实际传入的值 (即 `"123"`),从而允许开发者基于此构建更复杂的逻辑。 #### 3. Vuex 驱动下的复杂状态管理场景 对于一些需要全局共享的状态或者较为复杂的业务需求(比如首页导航栏根据某些条件改变显示内容),可以借助 Vuex 来集中管理和分发这些信息[^2]。 具体来说,可以在 store 文件夹下新建 action 和 mutation 方法用于更新当前激活菜单项等相关属性;随后绑定至视图层以便实反映最新改动情况。 #### 4. 解决多次刷新丢失数据问题——Keep Alive 缓存机制 为了避免频繁销毁重建带来的性能损耗以及可能引发的数据重置现象,推荐采用 keep-alive 方向保存特定组件实例在整个生命周期内的状态不变[^3]^。 下面是一个简单的例子展示如何结合 meta 属性判断是否开启缓存功能: ```vue <template> <!-- 判断是否有keepAlive --> <router-view v-slot="{ Component }" v-if="$route.meta.keepAlive"> <keep-alive> <component :is="Component"/> </keep-alive> </router-view> <router-view v-else></router-view> </template> <script> export default { } </script> ``` 这里的关键在于 `$route.meta.keepAlive`, 它决定了某条记录是否会进入保留队列之中。 #### 5. 多标签页支持扩展方案 如果项目中有类似浏览器多窗口的需求,则可进一步探索自定义 tab 控制器的设计思路[^4]. 这通常涉及到维护一个数组用来存储各个子选项卡的信息,并且每当新增加一个新的目标地址候就追加进去;与此同还需要注意移除操作后的重新排列顺序等问题. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值