当前位置:首页 » 《关注互联网》 » 正文

vue项目页面缓存,全局刷新_花落微凉梦清幽的博客

8 人参与  2022年01月14日 14:16  分类 : 《关注互联网》  评论

点击全文阅读


实现场景:在页面中我们要实现每个页面自己能控制是否缓存,即是否每次进入页面是否需要刷新页面,每个页面有不同的需求,并且在全局有一个按钮能在每个当前页面按这个按钮都可以刷新。

想了解vue各种组件的通信方式可以看:https://blog.csdn.net/qq_39009348/article/details/81511981

一、页面缓存

找到页面的内容区,即系统放页面的区域:

<keep-alive>
 <!-- 是否缓存页面:即每次进入页面是否刷新,若缓存则无法手动刷新页面 -->
 <router-view v-if="$route.meta.keepAlive&&isRouterViewShow"></router-view>
</keep-alive>
  <!-- 不缓存 -->
 <router-view v-if="!$route.meta.keepAlive&&isRouterViewShow"></router-view>

路由文件配置:

 二、全局页面刷新

在全局做了页面刷新,我们就不需要在每个页面单独做刷新了,提供两种解决方式:一种是刷新路由视图的方式,一种是在全局调用每个页面的刷新页面的接口

方式一:(注意:页面一定不能设置缓存,设置缓存则没用)

<!-- 不缓存 -->
<router-view v-if="!$route.meta.keepAlive&&isRouterViewShow"></router-view>

刷新按钮函数:

        // 页面刷新
        refresh() {
            console.log('当前路由', this.$route.name)
            /** 控制路由隐藏与显示办法刷新每个模块的数据,但是在路由设置了允许缓存后该方法不起作用 */
            // 先隐藏
            this.isRouterViewShow = false
            // $nextTick() 将回调延迟到下次 DOM 更新循环之后执行
            this.$nextTick(() => {
                this.isRouterViewShow = true
             })
        },

方式二:

用兄弟组件的通信方式,去触发每个兄弟组件的刷新函数,这种方式就不涉及到刷新路由,只是刷新渲染页面的获取数据的函数,则可以设置缓存与不缓存

先main.j是定义vue实例:

// 创建vue空实例
let hub = new Vue()
Vue.prototype.$eventhande = hub // 加入vue原型中,让所有组件可以访问到该对象

刷新按钮:

       // 页面刷新
        refresh() {
            console.log('当前路由', this.$route.name)
            // 触发自定义事件refresh,刷新每个模块的数据
            this.$eventhande.$emit('refresh', this.$route.name)
        },

每个页面的刷新页面:

注意:要传入每个当前页面的路由名称,然后判断只刷新当前页面,不然点击刷新,会触发所有页面兄弟组件的刷新事件,我们只想刷新当前打开页面而已

该监听函数在created生命周期中写就好了

        // 监听兄弟组件的自定义事件,并接受传入的值
        this.$eventhande.$on('refresh', (val) => {
            // 只刷新当前页面
            if (val === 'MaterialManage') {
                this.refresh()
            }
        })        


点击全文阅读


本文链接:http://zhangshiyu.com/post/33245.html

页面  刷新  缓存  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1