vue强制刷新的方法

news2024/12/25 12:53:53

前言 

在开发过程中,有时候会遇到这么一种情况:
1.切换页面页面没有更新
2.通过动态的赋值,但是dom没有及时更新,能够获取到动态赋的值,但是无法获取到双向绑定的dom节点,
这就需要我们手动进行强制刷新组件,下面这篇文章主要给大家介绍了关于vue组件强制刷新的方案,需要的朋友可以参考下 

  1. 刷新整个页面(最low的,可以借助router机制)
  2. 使用v-if标记(比较low的)
  3. provide和inject实现页面刷新
  4. 使用内置的forceUpdate方法(较好的)
  5. 使用key-changing优化组件(最好的)

location.reload();
this.$rotuer.go(0);

存在问题:

1.强制刷新页面,出现短暂的空白闪烁。

2.h5页面在安卓机方法不兼容。

  • this.$rotuer.go(0) 安卓、ios都不支持、pc支持
  • location.reload() 安卓不支持 、 ios支持、pc支持

一、强制全局刷新方法1- location.reload()

重新载入当前文档:location.reload();

定义和用法:

reload()方法用于刷新当前文档。

reload() 方法类似于你浏览器上的刷新页面按钮F5。

案例:

 点击修改按钮后,重新加载页面,让修改后的结果显示出来。

onSubmit() {
         ...
        update(...).then(response => {
          if (response.success) {
            this.$message({
              message: response.msg,
              type: response.success
            });
          }
          setTimeout(() => {
            this.listLoading = false
          }, 1.5 * 1000)
        })
        location.reload()
      },

PS:如果使用getList()来刷新页面,有可能有时不会有刷新的效果。而用location.reload()方法是肯定会刷新的。

二、强制全局刷新方法2- this.$router.go(0)

经常使用vue的小伙伴看到这个应该很熟悉吧,我们经常用它来实现前进后退,但别忘了它还可以实现自身页面刷新

this.$router.go(0)

 对于以上两种方法,虽然都可以实现页面刷新,但页面会刷的白一下,给用户的体验非常不好。利用provide/inject组合方式是我目前觉得最好用的方法,而且可以实现局部刷新。下面我们就来详细介绍其用法

三、强制全局刷新方法3- this.$forceUpdate();

<template>
    <div>xxx</div>
    <el-button @click="refresh()">强制刷新</el-button>
</template>
<script>
export default {
    data() {
        return {}
    },
    methods: {
        refresh() {
            // forceUpdate只会强制更新页面,不会更新现有的计算属性。
            this.$forceUpdate();
        }
    }
}
</script>

四、强制局部刷新方法- provide inject和v-if

vue局部刷新

通过设置isReload来解决不刷新问题,原理就是通过 v-if 控制组件容器的出现与消失, 达到重新渲染的效果 , 从而实现我们的目的。

(1)、在父组件Layout.vue的子组件Content.vue 中定义全局方法reload()

注意:provide 和 inject 绑定并不是可响应的。这是刻意为之的。然而,如果你传入了一个可监听的对象,那么其对象的 property 还是可响应的。 

<template>
  <section class="app-main">
    <transition name="fade-transform" mode="out-in">
      <router-view v-if="isReload1"/>
    </transition>
  </section>
</template>

<script>
export default {
  name: 'AppMain',
  data() {
    return {
      isReload1: true
    }
  },
  // 祖先组件向其所有子孙后代注入一个依赖,不论组件层次有多深,并在起上下游关系成立的时间里始终生效。
  provide() {
    return {
      reload1: this.reload1,
    };
  },
  methods: {
    reload1() {
      this.isReload1 = false;
      this.$nextTick(() => {
        this.isReload1 = true;
      });
    },
  }

}
</script>

<style scoped>
.app-main {
  /*58 = navbar  */
  min-height: calc(100vh - 58px);
  position: relative;
  overflow: hidden;
}
</style>

在需要引入的子组件中引入

inject: ["reload1"]

然后在子组件调用此方法:

<template>
<div class="page">
    <button @click="reloadFun">刷新</button>
</div>
</template>
 
<script>
import Vue from 'vue';
 
export default {
    inject:['reload'], // 使用 inject 注入 reload 变量 
    data(){
        return{
 
        }
    },
    methods: {
        reloadFun(){
            this.reload();  // 直接使用
        }
      },
    
}
</script>

 这种方法比第一种方法的用户体验好一些。

五、使用 v-if

<template>
    <div v-if="show">xxx</div>
    <el-button @click="refresh()">强制刷新</el-button>
</template>
<script>
export default {
    data() {
        return {
            show: true
        }
    },
    methods: {
        refresh() {
            this.show = false;
            // this.$nextTick可实现在DOM 状态更新后,执行传入的方法。
            this.$nextTick(() => {
                this.show = true;
            });
        }
    }
}
</script>

六、使用key-changing优化组件

原理很简单,vue使用key标记组件身份,当key改变时就是释放原始组件,重新加载新的组件。 

<template>
    <div :key="key>xxx</div>
    <el-button @click="refresh()">强制刷新</el-button>
</template>
<script>
export default {
    data() {
        return {
        	key: 1
        }
    },
    methods: {
        refresh() {
            this.key++;  // 或者 this.key= new Date().getTime();
        }
    }
}
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/807136.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

搭建自己的Git服务器

环境 服务端&#xff1a;Ubuntu 22.04 客户端&#xff1a;Win11_x64 前提条件&#xff1a;需要确保在Windows机器上能够ping通Ubuntu服务器, 并且服务端与客户端均已安装了Git软件 服务端上的配置操作 以Ubuntu服务器作为Git服务端的运行环境&#xff0c;并方便后期免密推…

iOS开发-CAShapeLayer与UIBezierPath实现微信首页的下拉菜单效果

iOS开发-CAShapeLayer与UIBezierPath实现微信首页的下拉菜单效果 之前开发中遇到需要使用实现微信首页的下拉菜单效果。用到了CAShapeLayer与UIBezierPath绘制菜单外框。 一、效果图 二、CAShapeLayer与UIBezierPath 2.1、CAShapeLayer是什么&#xff1f; CAShapeLayer继承自…

解决Nacos启动时遇到的一些错误

当我们双击nacos的bin目录下的statup.cmd启动Nacos时&#xff0c;发现报以下错误&#xff1a; [dba-load-error] load jdbc.properties error 报错的原因是&#xff1a;数据库找不到&#xff0c;没有导入。 解决方法步骤&#xff1a; ①在安装的nacos的conf目录下&#xff0…

C++:类和对象(下)---对类和对象深入一些的理解

文章目录 构造函数&#xff1f;初始化列表explicit关键字 匿名对象 构造函数&#xff1f; 初始化列表 前面已然介绍过构造函数&#xff0c;但并未完全结束&#xff0c;构造函数有很多种写法&#xff0c;有带缺省参数的&#xff0c;有全缺省的&#xff0c;不带缺省参数的…但用…

Jenkins从配置到实战(二) - Jenkins的Master-Slave分布式构建

前言 Jenkins的Master-Slave分布式构建&#xff0c;就是通过将构建过程分配到从属Slave节点上&#xff0c;从而减轻Master节点的压力&#xff0c;而且可以同时构建多个&#xff0c;有点类似负载均衡的概念。简单理解就是&#xff0c;将Jenkins服务器上的构建任务分配到其他机器…

GitLab开启双端认证并登录GitLab

GitLab开启双端认证并登录GitLab 1.介绍双端认证 单重认证——密码验证&#xff0c;这极其容易出现密码被盗&#xff0c;密码泄露等危险事件。 于是为了提高安全性&#xff0c;就出现了双因素认证&#xff0c;多因素认证。登录的时候不仅要输入账号和密码还需要输入一个验证码…

C++模板进价

本期我们来学习C模板的进价内容&#xff0c;没有看过初阶的同学建议先看看初阶内容 (26条消息) C模板初阶_KLZUQ的博客-CSDN博客 目录 非类型模板参数 模板特化 函数模板特化 类模板特化 模板分离编译 模板总结 我们之前一直说我们写模板时&#xff0c;typename和class没…

FPGA2-采集OV5640乒乓缓存后经USB3.0发送到上位机显示

1.场景 基于特权A7系列开发板&#xff0c;采用OV5640摄像头实时采集图像数据&#xff0c;并将其经过USB3.0传输到上位机显示。这是验证数据流能力的很好的项目。其中&#xff0c;用到的软件版本&#xff0c;如下表所示&#xff0c;基本的硬件情况如下。该项目对应FPGA工程源码…

【雕爷学编程】Arduino动手做(129)---TTS文字转语音合成模块2

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

【iOS】KVC KVO 总结

文章目录 KVC1. KVC赋值原理 setValue:forKey:2. KVC取值原理 valueForKey:3. 注意4. KVC的批量存值和取值 KVO 使用1. KVO的介绍2. KVO监听的步骤注册监听监听实现移除监听例子 3. KVO的传值4. KVO注意5. KVO的使用场景 KVO原理1. KVO的本质是改变了setter方法的调用2. _NSSet…

【图论】树上差分(边差分)

一.简介 其实点差分和边差分区别不大。 点差分中&#xff0c;d数组存储的是树上的节点 边差分中&#xff0c;d数组存储的是当前节点到父节点的那条边的差分值。 指定注意的是&#xff1a;边差分中因为根连的父节点是虚点&#xff0c;所以遍历结果时应当忽略&#xff01; 二…

西安科技大学:融合传统与创新的学府之旅

文章目录 一、引言二、历史与发展三、学校特色四、学科建设五、校园环境与设施六、合作交流七、未来发展与展望 一、引言 西安科技大学历史悠久&#xff0c;底蕴深厚。学校办学历史可以追溯到1895年成立的北洋大学工学院采矿冶金科&#xff0c;1938年迁并于西北工学院矿冶系&a…

网络编程、网络编程的三要素、TCP/UDP通信、三次握手和四次挥手

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaweb 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 网络编程 一、初始网络编程1.1什么是网络编程1.2BS/CS的优…

时序预测 | MATLAB实现NARX-ANFIS时间序列预测

时序预测 | MATLAB实现NARX-ANFIS时间序列预测 目录 时序预测 | MATLAB实现NARX-ANFIS时间序列预测效果一览基本介绍研究内容程序设计参考资料效果一览

JS判断类型的方法和对应的局限性(typeof、instanceof和Object.prototype.toString.call()的用法)

JS判断类型的方法和对应的局限性(typeof、instanceof和Object.prototype.toString.call()的用法&#xff09; 一、typeof 返回&#xff1a; 该方法返回小写字符串表示检测数据属于什么类型&#xff0c;例如&#xff1a; 检测函数返回function 可判断的数据类型&#xff1a…

【程序员面试金典】02.07. 链表相交

题目 解题思路 Code Java public ListNode getIntersectionNode(ListNode headA, ListNode headB) {if (headA null || headB null) return null;ListNode a headA;ListNode b headB;while (a ! b ) {a a ! null ? a.next : headB; b b ! null ? b.next : headA; …

MD-MTSP:成长优化算法GO求解多仓库多旅行商问题MATLAB(可更改数据集,旅行商的数量和起点)

一、成长优化算法GO 成长优化算法&#xff08;Growth Optimizer&#xff0c;GO&#xff09;由Qingke Zhang等人于2023年提出&#xff0c;该算法的设计灵感来源于个人在成长过程中的学习和反思机制。学习是个人通过从外部世界获取知识而成长的过程&#xff0c;反思是检查个体自…

cmake 配置Visual studio的调试命令

配置代码如截图&#xff1a; set_property(TARGET ${TARGET_NAME} PROPERTY VS_DEBUGGER_COMMAND "./consoleTest.exe") set_property(TARGET ${TARGET_NAME} PROPERTY VS_DEBUGGER_COMMAND_ARGUMENTS "./config/labelDriver.cfg") set_propert…

【LeetCode每日一题】——84.柱状图中最大的矩形

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 栈 二【题目难度】 困难 三【题目编号】 84.柱状图中最大的矩形 四【题目描述】 给定 n 个…

【LeetCode】142.环形链表Ⅱ

题目 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部…