vue项目实现详情页后退缓存之前的数据

2019年02月19日 14:54:57 不想写代码的程序员 阅读数:244
 

一、需要缓存的内容:

1、后退缓存条件查询的数据

2、后退缓存分页信息

二、实现

通过参考网上搜集的资料知道用keepAlive实现

参考地址:https://blog.csdn.net/sinat_17775997/article/details/80950246

1、在路由文件router.js中针对要缓存的页面进行设置

添加keepAlive: true,通过此字段判断是否需要缓存当前组件

添加keepAlive: true,通过此字段判断是否需要缓存当前组件

2、在app.vue文件中添加 :

<keep-alive>
            <router-view v-if="$route.meta.keepAlive"></router-view>
        </keep-alive>
        <router-view v-if="!$route.meta.keepAlive"></router-view>

$route.meta.keepAlive表示在1中配置缓存的页面进行缓存

3、在列表页面添加路由监听

(1)当要跳转到此列表页面的时候,设置keepAlive= true,缓存当前的页面数据

(2)在列表页面添加activated钩子函数
        activated() {
            // isUseCache为false时才重新刷新获取数据
            // 因为列表页面使用keep-alive来缓存组件,所以默认是会使用缓存数据的         
            if(!this.$route.meta.isUseCache) {
                // 清空原有数据
                this.allModelsData = []
                this.dataTypeList = []
                // 这是我们获取数据的函数
                this.fetchModels()
                this.getModelDatatype()
                this.$route.meta.isUseCache = false
            }
        },

4、在列表详情页添加:

beforeRouteLeave(to, from, next) {
            console.log("to.path-->", to.path)
            if(to.path == '/masterdatamodel') {
                to.meta.isUseCache = true
            } else {
                to.meta.zai  = false
            }
            next()
        },

//to.path == '/masterdatamodel'判断页面是否跳转到列表页,跳转到列表页则保存缓存数据

5、做完以上发现:

(1)列表页条件查询后,进入详情页,再后退,数据缓存依然在。要求实现

(2)进入详情页,再后退,发现分页不见了,页数只有1页,保存的数据为之前进入详情页的那页数据。

排查原因:发现分页组件dpGrid 使用的v-if="routerAlive",修改为v-show="routerAlive",至此分页缓存实现。

<dpGrid v-if="routerAlive" ref="gridPageComponent" @gridFeedback="onGridFeedback" :is-show="isGridShow" :data-fields="localPageConfig.dataFields" :grid-cols="gridCols" :grid-options="gridOptions" :data-rows="dataRows" :refresh-flag="refreshFlag">
            </dpGrid>

修改为:

<dpGrid v-show="routerAlive" ref="gridPageComponent" @gridFeedback="onGridFeedback" :is-show="isGridShow" :data-fields="localPageConfig.dataFields" :grid-cols="gridCols" :grid-options="gridOptions" :data-rows="dataRows" :refresh-flag="refreshFlag">
            </dpGrid>

(3)v-if和v-show的区别:

v-if是动态的向DOM树内添加或者删除DOM元素;v-show是通过设置DOM元素的display样式属性控制显隐。

详情参考:https://www.cnblogs.com/wmhuang/p/5420344.html

当使用v-if时候其他分页信息由于隐藏,后退则被删除了;而使用v-show,数据仍然保留,其他的分页的数据通过display:none被隐藏了。

vue项目实现详情页后退缓存之前的数据的更多相关文章

  1. vue中前进刷新、后退缓存用户浏览数据和浏览位置的实践

    vue中前进刷新.后退缓存用户浏览数据和浏览位置的实践 2018年07月07日 11:58:40 大灰狼的小绵羊哥哥 阅读数:4492   vue中,我们所要实现的一个场景就是: 1.搜索页面==&g ...

  2. vue项目实现列表页-详情页返回不刷新,再点其他菜单项返回刷新的需求

    问题背景:有时候一些列表会有一些跳转的需求,比如跳到详情页.或者是其他相关的页面(比如跳到用户列表去查看用户的相关信息)等,此时再返回列表页,列表页会刷新重置.目前需求就是需要改成如下情况: 问题1. ...

  3. vue列表到详情页的实现

    路由里边的 router/index.js path:'/detail/:id' 动态id 列表页渲染时: :to="'/detail/'+item.id" ===>id是指 ...

  4. 更换vue项目中标签页icon

    问题:在vue项目中, 需要将标签上的icon换成自己所需的,发现在更换了public/favicon.ico后,没有生效,依旧是原来Vue的icon. 解决办法:在vue.config.js中,修改 ...

  5. vue项目设置每个页面的title

    1.在项目目录下安装vue-wechat-title 2.在main.js中 使用vue-wechat-title 3.在router的配置中设置 4.在每个vue页面中加入 <div v-we ...

  6. 前端Vue项目——课程详情页面实现

    一.详情页面路由跳转 应用 Vue Router 编程式导航通过 this.$router.push() 来实现路由跳转. 1.绑定查看详情事件 修改 src/components/Course/Co ...

  7. vue 默认展开详情页

    { path: '/Tree', component: Tree, children: [ { path: '/', component: Come } ] }

  8. vue中前进刷新、后退缓存方案收集

    来源掘金: https://juejin.im/post/5b2ce07ce51d45588a7dbf76 来源博客园 https://www.cnblogs.com/wonyun/p/8763314 ...

  9. nginx实现商品详情页的缓存

随机推荐

  1. 【AtCoder】diverta 2019 Programming Contest

    diverta 2019 Programming Contest 因为评测机的缘故--它unrated了.. A - Consecutive Integers #include <bits/st ...

  2. postman的安装与使用方法介绍

    软件介绍 在我们平时开发中,特别是需要与接口打交道时,无论是写接口还是用接口,拿到接口后肯定都得提前测试一下,这样的话就非常需要有一个比较给力的Http请求模拟工具,现在流行的这种工具也挺多的,像火狐 ...

  3. 操作系统diy-1-资料整理

    已经研三了,前段时间校招找了份内核开发的工作,正好有时间做这个以前一直想做的事情.听说写操作系统要花很多时间了解学习计算机方方面面的知识,之前也查过相关的资料,关注过mit的操作系统公开课程.这几天准 ...

  4. F12的用法

    F12在Web测试中十分重要,可以定位元素(UI自动化常用),查看网页响应时间/数据(定位BUG,测单页面响应时间→性能) Elements 点击这个按钮,将光标移至“Google”图片位置并点击,右 ...

  5. android 一个SQLite数据库多个数据表的基本使用框架 (带demo)

    android 一个SQLite数据库多个数据表(带demo) 前言        demo演示        一.搭建        二.建立实体类        三.建立数据库操作类        ...

  6. java之JVM学习--简单理解编译和运行的过程之概览

    java代码编译流程图: java字节码执行由JVM执行引擎完成 Java代码编译和执行的整个过程包含了以下三个重要的机制: Java源码编译机制 类加载机制 类执行机制 Java源码编译机制 Jav ...

  7. ubuntu安装svn

    安装svn # sudo apt-get install subversion 创建svn仓库 # cd /root # mkdir svn # cd svn # svnadmin create re ...

  8. 测试clang-format的格式化效果

    我自己写的业余框架已告一段落,主体功能已完成,剩下的就是优化.第一个要优化的,就是代码格式.我一直是用编辑器写代码的,从之前的UltraEdit到notepad++到sublime text,再到现在 ...

  9. 一个比ES处理数据更快的工具--Hubble.Net

    http://www.cnblogs.com/eaglet/tag/Hubble.Net/

  10. Packet for query is too large (4,544,730 > 4,194,304). You can change this value on the server by setting the 'max_allowed_packet' variable.

    修改 my.ini 加上 max_allowed_packet =6710886467108864=64M默认大小4194304  也就是4M修改完成之后要重启mysql服务,如果通过命令行修改就不用 ...