当前位置: 首页 > news >正文

刷新当前页面

一, reload 直接刷新页面

window.location.reload();
$router.go(0);

相当于按了 F5, 因此缺点也很明显, 体验感不佳, 因为要加载所有页面资源相对较慢, 比较耗时.

二, Vue Router 刷新当前页面

这个时候, 我们通过 $router.push 一个 refresh 路由的形式实现, 具体步骤如下:

  1. 创建一个vue文件
<template>
<div></div>
</template>
<script setup>
beforeRouteEnter(to, from, next) {next(vm => {vm.$router.replace(from.fullPath);});
}
</script>
  1. 在你的路由文件中, 配置上述文件路由, 示例代码:
    routes 数组中直接添加就行]
{path: '/refresh',name: 'refresh',component: () => import('步骤一中创建文件的路径')
},
  1. 在目标位置, 使用 $router.push 上述路由即可, 示例代码:
$router.push({name: 'refresh'});

三, 依赖注入方式实现 (即, provide/inject )

中心思想: 通过 v-if 来切换 router-view 的 显示/隐藏 从而实现重新加载组件的目的. 步骤如下.

  1. 修改 路由出口文件 ( 我测试时是在 App.vue 文件中加的 ), 通过 provide 提供一个刷新方法给后代组件.

注意: 我的Demo中没有测试路由嵌套的场景, 如果你是路由嵌套, 只想刷新嵌套的子路由, 那在这一步修改的就应该是 子路由 出口文件.

核心代码:

<template><div id="app"><!-- <router-view></router-view> --><router-view v-if="isRefreshFlag"></router-view></div>
</template>
<script setup>
import { ref, nextTick, provide } from "vue";const isRefreshFlag = ref(true)
function reloadPage() {isRefreshFlag.value = false;nextTick(() => {isRefreshFlag.value = true})
}
provide("reloadPage", reloadPage)</script>

后台管理平台Geeker项目刷新(只刷新嵌套的子路由)
Main.vue

// 注入刷新页面方法
<template><router-view v-slot="{ Component, route }"><component :is="createComponentWrapper(Component, route)" v-if="isRouterShow" :key="route.fullPath" /></<router-view>   
</template>
<script setup lang="ts">const isRouterShow = ref(true);const refreshCurrentPage = (val: boolean) => (isRouterShow.value = val);provide("refresh", refreshCurrentPage);
</script>

tab.vue
refresh按钮

<script setup lang="ts">
// refresh current page
const refreshCurrentPage: Function = inject("refresh") as Function;
const refresh = () => {setTimeout(() => {route.meta.isKeepAlive && keepAliveStore.removeKeepAliveName(route.fullPath as string);refreshCurrentPage(false);nextTick(() => {route.meta.isKeepAlive && keepAliveStore.addKeepAliveName(route.fullPath as string);refreshCurrentPage(true);});}, 0);
};
</script>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Vue】vue两个核心功能声明式渲染_响应式
  • React前端面试每日一试 1.虚拟DOM是什么?
  • GNU/Linux - Bazaar版本管理工具
  • Vue系列面试题
  • WebKit的CSS Aspect Ratio Box:重塑响应式设计
  • Java面试八股之后Spring、spring mvc和spring boot的区别
  • Linux:Linux进程控制
  • 苍穹外卖01
  • Scrapy 爬取旅游景点相关数据(四)
  • 企业公户验证API如何使用JAVA、Python、PHP语言进行应用
  • react中useReducer钩子函数的使用
  • 强制通风(1):汽车发动机为什么需要强制通风,什么是强制通风?
  • day08:订单状态定时处理、来单提醒和客户催单
  • 【机器学习】智驭未来:机器学习如何重塑制造业的转型与升级
  • PHP身份证实名认证接口集成守护电商购物
  • python3.6+scrapy+mysql 爬虫实战
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • C++类的相互关联
  • CAP理论的例子讲解
  • Java 最常见的 200+ 面试题:面试必备
  • JavaScript的使用你知道几种?(上)
  • Java教程_软件开发基础
  • js数组之filter
  • JS学习笔记——闭包
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • Puppeteer:浏览器控制器
  • Python3爬取英雄联盟英雄皮肤大图
  • Spring Cloud Feign的两种使用姿势
  • 工程优化暨babel升级小记
  • 漂亮刷新控件-iOS
  • 如何设计一个微型分布式架构?
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 小试R空间处理新库sf
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • # 透过事物看本质的能力怎么培养?
  • (7)摄像机和云台
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (八十八)VFL语言初步 - 实现布局
  • (第61天)多租户架构(CDB/PDB)
  • (论文阅读11/100)Fast R-CNN
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • .net core Redis 使用有序集合实现延迟队列
  • .Net Core中Quartz的使用方法
  • .Net8 Blazor 尝鲜
  • .NET开源项目介绍及资源推荐:数据持久层
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)
  • @EventListener注解使用说明