单页面Vue页面刷新出现闪烁问题及解决

 更新时间:2022年07月28日 11:18:20   作者:zhangjjjh  
这篇文章主要介绍了单页面Vue页面刷新出现闪烁问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

分析原因: 为什么刷新会出现闪烁的问题?

因为浏览器是html从上到下执行,

先执行Dom元素

然后执行javaScript元素

当走到javaScript时,Dom元素已经开始走动,所以如果网慢的话,会显示的特别明显

解决方法: 使用 v-cloak 用法

v-cloak指令 和 css规则 [v-cloak] {display:none} 一起用时,这个指令可以隐藏未编译的Mustache标签直到实例准备完毕。

原理:

带有v-clock的的元素设置为display:none,隐藏掉,在等到vue解析到带有v-clock的节点时候,会把attribute和class同时remove掉,这样就可以实现防止节点的闪烁。

实例:

[v-cloak] {
display: none; 
} 
<div v-cloak>
{{ message }}
</div>

图解:

html 代码

加在挂载点(#app),可以让整个页面在未加载完JS时,整个页面都不渲染, 如果不需要,只需要在对应闪烁的标签中加v-cloak即可

css 代码

关于Vue刷新页面问题

Vue 中是单页面,当然需要刷新数据咯

你一定遇到这样的需求:

比如在删除或者增加一条记录的时候希望当前页面可以重新刷新或者这个页面有个组件 ,但是这个组件里面的点击事件还是到当前页面 

如何解决 

1.在使用Vue-router做项目时,会遇到如/serviceId/:id这样只改变id号的场景。由于router-view是复用的,单纯的改变id号并不会刷新router-view,而这并不是我们所期望的结果。

2.我们可以在点击事件上  window.reload(),或者router.go(0)刷新时,强制刷新整个页面。整个浏览器进行了重新加载,闪烁,体验不好

3.使用watch的方法,具体的可以看一下官方文档

watch: { 
'$route': function (to, from) { 
       this.$store.dispatch('updateActiveTemplateId', 
       this.$route.params.templateId) // 通过更新Vuex中的store的数据,让数据发生变化 
           this.getTemplateById() 
} }

当然我也看过一些博客,总结了下 如何更好的解决

provide / inject 组合

作用:允许一个祖先组件向其所有子孙后代注入一个依赖,不论组件层次有多深,并在起上下游关系成立的时间里始终生效。

在你的App.vue页面里面

声明reload方法,控制router-view的显示或隐藏,从而控制页面的再次加载

然后在你的详情页面

tableList.vue:

在页面注入App.vue组件提供(provide)的 reload 依赖,在逻辑完成之后(删除或添加...),直接this.reload()调用,即可刷新当前页面。

解释下:

  • provide:选项应该是一个对象或返回一个对象的函数。该对象包含可注入其子孙的属性。
  • inject:一个字符串数组,或一个对象,对象的 key 是本地的绑定名

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

当然你不能 是在created里调用getData(), 在getData里又调用了this.reload().

这样会导致死循环的 ,所以要合理的运用就这个方法

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Vue中使用js制作进度条式数据对比动画

    Vue中使用js制作进度条式数据对比动画

    这篇文章主要为大家详细介绍了Vue中使用js制作进度条式数据对比动画,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Vue 项目中如何使用fullcalendar 时间段选择插件(类似课程表格)

    Vue 项目中如何使用fullcalendar 时间段选择插件(类似课程表格)

    最近完成一个项目,需要选择一个会议室,但是最好能够通过在图上显示出该 会议室在某某时间段内已经被预定了,初看这个功能感觉很棘手,仔细分析下实现起来还是挺容易的,下面通过示例代码讲解Vue项目中使用fullcalendar时间段选择插件,感兴趣的朋友一起看看吧
    2024-07-07
  • 基于Vue和ECharts实现定时更新与倒计时功能的实战分享

    基于Vue和ECharts实现定时更新与倒计时功能的实战分享

    在前端开发中,动态数据展示和用户交互是构建现代 Web 应用的核心需求之一,在本篇博客中,我们将通过一个简单的案例,展示如何在 Vue 中结合 ECharts 实现一个定时更新和倒计时功能,用于实时监控和数据可视化,需要的朋友可以参考下
    2025-01-01
  • Vue3配置axios跨域实现过程解析

    Vue3配置axios跨域实现过程解析

    这篇文章主要介绍了Vue3配置axios跨域实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • vue3 Vite 进阶rollup命令行使用详解

    vue3 Vite 进阶rollup命令行使用详解

    这篇文章主要介绍了vue3 Vite 进阶rollup命令行使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Vue3监听store中数据变化的三种方式

    Vue3监听store中数据变化的三种方式

    这篇文章给大家介绍了Vue3监听store中数据变化的三种方法,使用watch和storeToRefs函数,使用计算属性computed和使用watchEffect函数这三种方法,文中通过代码讲解非常详细,需要的朋友可以参考下
    2024-01-01
  • vue如何使用js对图片进行点击标注圆点并记录它的坐标

    vue如何使用js对图片进行点击标注圆点并记录它的坐标

    这篇文章主要介绍了vue如何使用js对图片进行点击标注圆点并记录它的坐标,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • Vue高级用法实例教程之动态组件

    Vue高级用法实例教程之动态组件

    让多个组件使用同一个挂载点,并动态切换,这就是动态组件,下面这篇文章主要给大家介绍了关于Vue高级用法实例教程之动态组件的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2021-11-11
  • 解决vue中reader.onload读取文件的异步问题

    解决vue中reader.onload读取文件的异步问题

    这篇文章主要介绍了解决vue中reader.onload读取文件的异步问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • 使用el-checkbox-group选中后值为true和false遇到的坑

    使用el-checkbox-group选中后值为true和false遇到的坑

    这篇文章主要介绍了使用el-checkbox-group选中后值为true和false遇到的坑及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07

最新评论