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

news2024/12/22 17:30:14

一、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-picker
          v-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>

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

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

相关文章

【NC223888】红色和紫色

题目 红色和紫色 博弈论&#xff0c;想得出来思路就简单&#xff0c;想不出来就难。一般使用猜测法。 思路 如果小红随意取一个格子涂色&#xff0c;那么小紫怎么涂色才是她的最优选择呢&#xff1f; 假设小紫只能选择小红涂色的格子的相邻格子或者是最近斜对角的一个格子涂色…

回归学术圈,何恺明MIT第一堂AI课

大家好&#xff0c;3月7日&#xff0c;麻省理工学院电气工程与计算机科学系副教授何恺明&#xff0c;迈上讲台&#xff0c;并成功地进行了他人生中的首堂教学课程。 第一堂课 课程官网&#xff1a;https://advances-in-vision.github.io/ 作为麻省理工学院&#xff08;MIT&am…

【算法篇】七大基于比较的排序算法精讲

目录 排序 1.直接插入排序 2.希尔排序 3.直接选择排序 4.堆排序 5.冒泡排序 6.快速排序 7.归并排序 排序 排序算法的稳定性&#xff1a;假设在待排序的序列中&#xff0c;有多个相同的关键字&#xff0c;经过排序后&#xff0c;这些关键字的先后顺序不发生改变&#…

动态规划8, 摆动序列,最长递增子序列,最长数对链

本次的题与动态规划7 的题有相似与共通之处&#xff0c;建议先去看 动态规划7&#xff1a;动态规划7 摆动序列 什么是摆动序列&#xff1f; 就像这种&#xff1a; 一个数&#xff0c;一个下降&#xff0c;上升&#xff0c;来回上升下降都可以叫摆动序列。 思路&#xff1a; …

政安晨:【深度学习处理实践】(八)—— 表示单词组的两种方法:集合和序列

咱们接着这个系列的上一篇文章继续&#xff1a; 政安晨&#xff1a;【深度学习处理实践】&#xff08;七&#xff09;—— 文本数据预处理https://blog.csdn.net/snowdenkeke/article/details/136697057 机器学习模型如何表示单个单词&#xff0c;这是一个相对没有争议的问题…

分析基于解析物理模型的E模式p沟道GaN高电子迁移率晶体管(H-FETs)

来源&#xff1a;Analyzing E-Mode p-Channel GaN H-FETs Using an Analytic Physics-Based Compact Mode&#xff08;TED 24年&#xff09; 摘要 随着近期对用于GaN互补技术集成电路&#xff08;ICs&#xff09;开发的p沟道GaN器件研究兴趣的激增&#xff0c;一套全面的模型…

算法笔记 连载中。。。

HashMap&#xff08;会根据key值自动排序&#xff09; HashMap<String, Integer> hash new HashMap<>() hash.put(15,18) hash.getOrDefault(ts, -1) //如果ts(key)存在&#xff0c;返回对应的value 否则返回-1 hashMap1.get(words1[i])1会报错&#xff0c;因…

快速高效地数据分析处理:QtiPlot for Mac中文直装版 兼容M

QtiPlot 是一个用于数据分析和可视化的跨平台科学应用程序。由于其多语言支持&#xff0c;QtiPlot 被积极用于世界各地学术机构的教学。许多研究科学家信任 QtiPlot 来分析他们的数据并发布他们的工作结果。来自各个科学领域和行业的数千名注册用户已经选择了 QtiPlot 来帮助他…

SQLiteC/C++接口详细介绍之sqlite3类(十五)

返回目录&#xff1a;SQLite—免费开源数据库系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍之sqlite3类&#xff08;十四&#xff09; 下一篇&#xff1a;SQLiteC/C接口详细介绍之sqlite3类&#xff08;十六&#xff09; 47.sqlite3_set_authorizer 用法&#xff…

【Preprocessing数据预处理】之Scaler

在机器学习中&#xff0c;特征缩放是训练模型前数据预处理阶段的一个关键步骤。不同的缩放器被用来规范化或标准化特征。这里简要概述了您提到的几种缩放器&#xff1a; StandardScaler StandardScaler 通过去除均值并缩放至单位方差来标准化特征。这种缩放器假设特征分布是正…

Seata 2.x 系列【9】事务会话存储模式

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Seata 版本 2.0.0 本系列Spring Boot 版本 3.2.0 本系列Spring Cloud 版本 2023.0.0 源码地址&#xff1a;https://gitee.com/pearl-organization/study-seata-demo 文章目录 1. 概述2. 存储模…

虚拟机网络链接

在虚拟网络设置中找到如下界面&#xff1a; "子网 IP" 192.168.79.0/24 表示一个局域网络&#xff0c;它有254个可能的IP地址可供分配&#xff08;192.168.79.1到192.168.79.254&#xff09;&#xff0c;255.255.255.0 是子网掩码&#xff0c;定义了网络和主机部分。…

MySQL--深入理解MVCC机制原理

什么是MVCC&#xff1f; MVCC全称 Multi-Version Concurrency Control&#xff0c;即多版本并发控制&#xff0c;维持一个数据的多个版本&#xff0c;主要是为了提升数据库的并发访问性能&#xff0c;用更高性能的方式去处理数据库读写冲突问题&#xff0c;实现无锁并发。 什…

Cartwheel——文本生成3D动作或动画的工具

一个强大的文本转3D动画平台,用户只需通过输入文字提示即可生成视频、游戏、电影、广告、社交或VR项目所需的3D动画角色。 Cartwheel 是一个功能强大的文本到动画平台。只需键入即可为您的视频、游戏、电影、广告、社交或 VR 项目制作角色动画 定位: 定位于为用户提供简单…

Unity类银河恶魔城学习记录10-11 p99 Aliment visual effects源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili EntityFX.cs using System.Collections; using System.Collections.Gener…

Mysql事务+锁测试 RR行锁升级

Mysql事务锁测试 Mysql5.7 在隔离级别RR下&#xff0c;添加写锁&#xff0c;锁住一行数据&#xff0c;写锁是排它锁&#xff0c;不允许其它的读写、 另外开启一个连接&#xff0c;进行写操作&#xff0c;发现执行没有成功&#xff0c;在等待锁 查询事务表&#xff0c;有两个事…

openssl3.2 - note - Decoders and Encoders with OpenSSL

文章目录 openssl3.2 - note - Decoders and Encoders with OpenSSL概述笔记编码器/解码器的调用链OSSL_STORE 编码器/解码器的名称和属性OSSL_FUNC_decoder_freectx_fnOSSL_FUNC_encoder_encode_fn官方文档END openssl3.2 - note - Decoders and Encoders with OpenSSL 概述 …

大数据Doris(六十八):基于Doris on ES的架构实现总结

文章目录 基于Doris on ES的架构实现总结 一、Mem Join架构遗留的核心问题 二、Doris

河南大学大数据平台技术实验报告二

大数据平台技术课程实验报告 实验二&#xff1a;HDFS操作实践 姓名&#xff1a;杨馥瑞 学号&#xff1a;2212080042 专业&#xff1a;数据科学与大数据技术 年级&#xff1a;2022级 主讲教师&#xff1a;林英豪 实验时间&#xff1a;2024年3月15日3点 至 2024年3月15日4点40 …

力扣经典题:分割平衡字符串

大佬的代码非常简洁 int balancedStringSplit(char * s){short i0,count0,sign0;while(s[i]){signs[i]L?sign1:sign-1;if(sign0) count;}return count; }