Vue 3 + TypeScript 项目中全局挂载并使用工具函数

一、proxy方式
1.封装日期选择工具函数:
在untils文件夹下新建index.ts,并导出工具函数
/*** 获取不同类型日期* param:类型 dateVal: 是否指定*/
export function getSystemDate(param: any, dateVal: any) {let systemDate = dateVal ? new Date(dateVal) : new Date(),year = systemDate.getFullYear(),month = systemDate.getMonth() + 1,date = systemDate.getDate(),hours = systemDate.getHours(),minutes = systemDate.getMinutes(),seconds = systemDate.getDate(),milliseconds = systemDate.getMilliseconds();month = month < 10 ? "0" + month : month;date = date < 10 ? "0" + date : date;hours = hours < 10 ? "0" + hours : hours;minutes = minutes < 10 ? "0" + minutes : minutes;seconds = seconds < 10 ? "0" + seconds : seconds;if (param == 0) {return year + "-" + month + "-" + date;} else if (param == 1) {return year + "-" + month + "-" + date + " " + hours + ":" + minutes + ":" + seconds;} else if (param == 2) {return year + "-" + month + "-" + date + " " + hours + ":" + minutes + ":" + seconds + "." + milliseconds;} else if (param == 3) {return year + "-" + month;} else if (param == 4) {return year;}
}
2.引入并挂载到全局
在main.ts中,引入后挂载
import { App, createApp } from "vue";
import App from "./App.vue";import { getSystemDate } from "@/utils/index"; //引入全局使用的方法const app = createApp(App);app.config.globalProperties.$getSystemDate = getSystemDate; //挂载到全局app.mount("#app");
注意:
1.vue3中挂载实例要用app.config.globalProperties.$方法,而vue2中挂载实例是Vue.prototype.$方法;
3.在页面中按需调用
template部分代码:
<template><div><el-date-pickerv-model="plantInfo.gridDate"type="date"placeholder="选择日期":disabled-date="disabledDate":shortcuts="shortcuts"format="YYYY-MM-DD"style="width: 100%"/></div>
</template>
script 中代码:
<script setup lang="ts" name="site">
import { ref, reactive, getCurrentInstance } from "vue";// proxy相当于 vue2的this,从getCurrentInstance 实例中获取,proxy对象
const { proxy } = getCurrentInstance();interface PlantInfo {plantName: any;plantScale: any;sysuserid: any;userDepid: any;gridDate: any;plantNetType: any;voltageLevel: any;prjAddr: any;longitude: any;moduleManufacturer: any;componentBrand: any;componentModel: any;workHours: any;plantStatus: any;roofPitch: any;orientation: any;plantShip: any;plantType: any;streetAddress: any;plantSummary: any;plantImageUrl: any;plantInvestor: any;
}const plantInfo = ref<PlantInfo>({plantName: "",plantScale: "",sysuserid: "",userDepid: "",gridDate: proxy.$getSystemDate(0),plantNetType: "",voltageLevel: "",prjAddr: "",longitude: "",moduleManufacturer: "",componentBrand: "",componentModel: "",workHours: "",plantStatus: "",roofPitch: "",orientation: "",plantShip: "",plantType: "",streetAddress: "",plantSummary: "",plantImageUrl: "",plantInvestor: ""
});const disabledDate = (time: Date) => {return time.getTime() > Date.now();
};
// 快速日期选择属性
const shortcuts = [{text: "今天",value: new Date()},{text: "昨天",value: () => {const date = new Date();date.setTime(date.getTime() - 3600 * 1000 * 24);return date;}},{text: "一周前",value: () => {const date = new Date();date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);return date;}}
];
</script>
二、provide方式
在Vue 3 + TypeScript 中挂载并使用一个全局的工具函数,你可以通过 Vue 实例的 provide 和 inject 方法来实现。具体步骤如下:
1.创建工具函数: 首先,创建你的工具函数。
// utils.ts
export function myUtilityFunction(): void {// Your utility function logic here
}
2.在主入口文件中挂载工具函数: 在 Vue 的主入口文件中,将工具函数通过 provide 方法挂载到全局。
// main.ts
import { createApp } from 'vue';
import App from './App.vue';
import { myUtilityFunction } from './utils';const app = createApp(App);// 将工具函数挂载到全局
app.provide('myUtility', myUtilityFunction);app.mount('#app');
3.在组件中使用工具函数: 在需要使用工具函数的组件中,通过 inject 方法注入并使用该函数。
<!-- MyComponent.vue -->
<template><div><button @click="useUtility">使用工具函数</button></div>
</template><script lang="ts">
import { defineComponent, inject } from 'vue';export default defineComponent({setup() {// 注入工具函数const myUtility = inject<() => void>('myUtility');const useUtility = () => {// 使用工具函数myUtility();};return {useUtility};}
});
</script>
相关文章:
Vue 3 + TypeScript 项目中全局挂载并使用工具函数
一、proxy方式 1.封装日期选择工具函数: 在untils文件夹下新建index.ts,并导出工具函数 /*** 获取不同类型日期* param:类型 dateVal: 是否指定*/ export function getSystemDate(param: any, dateVal: any) {let systemDate dateVal ? new Date(da…...
第二门课:改善深层神经网络<超参数调试、正则化及优化>-超参数调试、Batch正则化和程序框架
文章目录 1 调试处理2 为超参数选择合适的范围3 超参数调试的实践4 归一化网络的激活函数5 将Batch Norm拟合进神经网络6 Batch Norm为什么会奏效?7 测试时的Batch Norm8 SoftMax回归9 训练一个SoftMax分类器10 深度学习框架11 TensorFlow 1 调试处理 需要调试的参…...
漫谈微服务网关
一、什么是服务网关 服务网关 路由转发 过滤器 1、路由转发:接收一切外界请求,转发到后端的微服务上去; 2、过滤器:在服务网关中可以完成一系列的横切功能,例如权限校验、限流以及监控等,这些都可以通过…...
进击的PostgreSQL
目录 前言 一、什么是PostgreSQL 1.PostgreSQL的定义 2.PostgreSQL功能和特性 2.1数据类型 2.2数据完整性 2.3并发性、性能 2.4可靠性、灾难恢复 2.5安全 2.6扩展 2.7国际化、文本搜索 二、部署PostgreSQL 1.下载与安装 2.配置数据库 3.配置远程访问 4.修改配置…...
本地gitlab-runner的创建与注册
引言 之前通过一些方式在本地创建runner,时而会出现一些未知的坑,所以写下本文记录runner可以无坑创建的方式。 以下注册runner到相应仓库的前提是已经在本地安装了gitlab-runner 具体安装方式见官网 本地gitlab-runner安装常用的指令 查看gitlab r…...
《UE5_C++多人TPS完整教程》学习笔记28 ——《P29 Mixamo 动画(Mixamo Animations)》
本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P29 Mixamo动画(Mixamo Animations)》 的学习笔记,该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版,UP主(也是译者…...
剑指offer力扣题集
剑指offer Krahets前辈整理的题解,这个博客为了方便自己刷题和复习,加油! 01. 数组中重复的数字 力扣链接 02. 二维数组中的查找 力扣链接 03. 替换空格 力扣链接 04. 从尾到头打印链表 力扣链接 05. 重建二叉树 力扣链接好难 -_-…...
【商业|数据科学主题会议推荐】2024年商业分析与数据科学国际学术会议(ICBADS 2024)
【商业|数据科学主题会议推荐】2024年商业分析与数据科学国际学术会议(ICBADS 2024) 征稿主题 (以下主题包括但不限于) 多媒体决策 决策理论与决策科学 数字市场设计与运营 降维 电子商务 道德决策 财务分析 群体决策与软件 医疗保…...
爬虫技术实战案例解析
目录 前言 案例背景 案例实现 案例总结 结语 前言 作者简介: 懒大王敲代码,计算机专业应届生 今天给大家聊聊爬虫技术实战案例解析,希望大家能觉得实用! 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!…...
Git 使用笔记
基本操作: 初始化 (git init) 使用背景和作用: 在本地建立一个文件夹后,基于这个文件夹进行git 操作,赋予git操作本文件夹的权限 。查看当前文件夹状态(git status) 每次打开文件夹…...
python -- 语法与变量
你好, 我是木木, 目前正在做两件事 1. 沉淀自己的专业知识 2. 探索了解各种副业项目,同时将探索过程进行分享,帮助自己以及更多朋友找到副业, 做好副业 文末有惊喜 语法的简要说明 每种语言都有自己的语法,不管是自然语言(…...
24计算机考研调剂 | 太原科技大学
2024年太原科技大学 力学专业 接收研究生调剂通告 考研调剂招生信息 招生专业: 080100(力学) 01先进材料变形行为及力学性能 02 计算力学及其应用 03结构动力学与无损检测 04复合材料断裂理论与结构设计 补充内容 调剂考生基本要求 &…...
Leetcode 204. 计数质数 java题解
https://leetcode.cn/problems/count-primes/description/ 法一 class Solution {public int countPrimes(int n) {int count0;for(int i2;i<n;i){//判断i是否质数boolean ftrue;for(int j1;j*j<i;j){//因子if(j!1&&j!i&&(i%j0)){ffalse;break;}}if(f){…...
机器学习——终身学习
终身学习 AI不断学习新的任务,最终进化成天网控制人类终身学习(LLL),持续学习,永不停止的学习,增量学习 用线上收集的资料不断的训练模型 问题就是对之前的任务进行遗忘,在之前的任务上表现不好…...
一次完整的 HTTP 请求所经历的步骤
1: DNS 解析(通过访问的域名找出其 IP 地址,递归搜索)。 2: HTTP 请求,当输入一个请求时,建立一个 Socket 连接发起 TCP的 3 次握手。如果是 HTTPS 请求,会略微有不同。 3: 客户端向服务器发…...
OpenGL学习笔记【1】——简介
一、OpenGL概念 OpenGL (Open Graphics Library,译名:开放式图形库开放式图形库) 是一种用于渲染 2D 和 3D 图形的跨语言、跨平台的编程接口(API)。 二、OpenGL跨语言 OpenGL 是一个 C 语言库,因此理解 C 语言(或 C)的…...
C语言课后作业 20 题+考研上机应用题
题目 1: 计算圆的面积 描述: 输入圆的半径,计算并输出圆的面积。 题目 2: 判断一个年份是否为闰年 描述: 输入一个年份,判断并输出该年份是否为闰年。 题目 3: 计算并输出斐波那契数列的前10个数 描述: 输出斐波那…...
macOS上基于httpd-dav搭建WebDav服务
文章目录 配置 Apache httpd修改 ServerName启动验证 httpd 服务启用 Dav 扩展服务配置 配置 httpd 扩展 Dav 服务设置共享目录文件夹配置 DavLockDB 目录创建 WebDAV 访客用户 httpd-dav.conf 主要改动部分BasicDigest共享多个目录 授予 httpd 完全磁盘访问权限验证更新配置重…...
Java-设计模式-单例模式
单例模式 从单例加载的时机区分,有懒汉模式/饥饿模式。 从实现方式区分有双重检查模式,内部类模式/Enum模式/Map模式等。在《Effective Java》中,作者提出利用Enum时实现单例模式的最佳实践。 内容概要 实现单例模式的几个关键点 利用Enu…...
图片html5提供的懒加载与vue-lazyload的区别
原生HTML lazy loading特性 <img src"/images/ocean.jpeg" alt"Ocean" loading"lazy"> loading"lazy" 是HTML5的一个原生特性,它允许浏览器延迟加载图片直至图片距离视口很近或者即将进入视口时。这是一种由浏览器…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...
C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
