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

vue实现页面渲染时候执行某需求

1. 前言

在之前的项目中,需要实现一个监控token是否过期从而动态刷新token的功能,然而在登录成功后创建的监控器会在浏览器刷新点击或者是通过导航栏输入网址时销毁...

2. 试错

前前后后始过很多方法,在这里就记录一下也许也能为各位读者排雷

2.1 window.addEventListener

一开始想到的是在每一个页面上加一个监听listener,监听页面加载事件,没当加载时候就调用检测token的方法,但是实际测试中并不能完全实现(主要在浏览器刷新点击)个人猜测可能是缓存问题,有时浏览器缓存可能导致脚本不按预期运行。

window.addEventListener('load', () => {console.log(11)onPageRender();
});

2.2 defineComponent

由于本人的项目是ts+vue的编译,一开始没想到用这个,就有了如下测试,即是在defineComponent中使用mounted钩子函数,每当页面动态刷新时都会调用生成监控器

<script lang="ts">import { defineComponent } from 'vue';import { onPageRender } from '@/utils/tokenMonitor'export default defineComponent({name: 'MyComponent',mounted() {// 在这里编写你的页面渲染逻辑onPageRender();},});
</script>

 但是在实际测试的过程中也是有时候正常有时候不正常,可能是我ts中使用响应式编程一些变量函数定义在这个defineComponent外面的原因(如下图所示),反正就是不能完美解决我的需求

3. 解决方案

在上图中使用 <script setup> 来定义script,官方的解释是这个setup就是会默认导出script中定义的所有内容,所以就不能再使用export default进行导出(ts会报错A module cannot have multiple default exports!!)该官方解释详见script setupicon-default.png?t=N7T8https://vuejs.org/api/sfc-script-setup.html在阅读官方文档的时候也是意外发现了最终的解决方案(在Using Custom Directives处,可以搜索一下)或者看我下面截图(不一定能正常显示,看得到最好啦😁)

 这里使用本地自定义指令,对于前端小白来说是一个新东西,根据官网的代码示例来改写代码就有了最终成功版本,此时每当页面加载到这个h1标签时候,就会执行vMonitorDirective中定义的beforeMount添加监控器,防止网站刷新时候被kill掉。最终测试结果也是正和我意,完美解决问题在此记录一下👍

const vMonitorDirective = {beforeMount: () => {// do something with the elementonPageRender();}
}// 绑定处,注意命名规范
<h1 v-Monitor-directive class="page-title">Orders</h1>

相关文章:

  • Vue 前端加框 给div加红色框框 js实现
  • 【PB案例学习笔记】-12秒表实现
  • 【PostgreSQL17新特性之-事务级别超时参数transaction_timeout】
  • 虚拟机改IP地址
  • NIFT和BMP批量互相转换(matlab)
  • 【数据结构:排序算法】堆排序(图文详解)
  • RTKLIB学习--前向滤波
  • (函数)颠倒字符串顺序(C语言)
  • FFMPEG 解码过程初步学习
  • 重学java 51.Collections集合工具类、泛型
  • robosuite导入自定义机器人
  • SpringBoot+Vue开发记录(六)-- 后端配置mybatis
  • MySQL之创建高性能的索引(六)
  • SpringBoot整合WebSocket实现聊天室
  • MySQL数据库入门之视图、存储过程、触发器
  • JavaScript 如何正确处理 Unicode 编码问题!
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • github指令
  • httpie使用详解
  • HTTP中GET与POST的区别 99%的错误认识
  • javascript数组去重/查找/插入/删除
  • Java精华积累:初学者都应该搞懂的问题
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • python docx文档转html页面
  • unity如何实现一个固定宽度的orthagraphic相机
  • XForms - 更强大的Form
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 前端技术周刊 2019-01-14:客户端存储
  • 深度学习中的信息论知识详解
  • 使用putty远程连接linux
  • 携程小程序初体验
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • ​Redis 实现计数器和限速器的
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #QT(一种朴素的计算器实现方法)
  • ${ }的特别功能
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (ZT)出版业改革:该死的死,该生的生
  • (八)Flask之app.route装饰器函数的参数
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (六)c52学习之旅-独立按键
  • (十三)Flink SQL
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)jdk与jre的区别
  • (转)LINQ之路
  • (转)关于多人操作数据的处理策略
  • (转载)从 Java 代码到 Java 堆
  • .md即markdown文件的基本常用编写语法
  • .net 按比例显示图片的缩略图
  • .Net 基于IIS部署blazor webassembly或WebApi
  • .NET 药厂业务系统 CPU爆高分析
  • .NET大文件上传知识整理