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

vue3 + TS 定义全局变量和方法

vue3 定义全局变量主要是利用组件实例中的 globalProperties 属性 来完成绑定。

1. 绑定赋值

我们直接来封装一个插件,方便后期管理。

  • global.ts
import type { App } from "vue";const fn = () => "鱼钓猫的小鱼干";export default {// 这里的 app 就是 main.ts 中创建的实例install(app: App) {app.config.globalProperties.$env = "dev";app.config.globalProperties.$fishingcat = fn;},
};
  • main.ts
import "./assets/main.css";
import { createApp } from "vue";import App from "./App.vue";
// 引入插件
import global from "@/plugin/global";const app = createApp(App);
// 注册插件
app.use(global);app.mount("#app");

2. 应用

  • 绑定的全局变量或方法可以直接在任何组件中的 template 模版中直接使用。

index.vue

<template><h1>{{ $env }}</h1><h1>{{ $fishingcat() }}</h1>
</template>

我是效果图
在这里插入图片描述

  • ts 中需要在组件实例中访问。
<script setup lang="ts">import { getCurrentInstance } from "vue";
const instance = getCurrentInstance();// 在实例中的 proxy属性 上可以访问到所有的全局属性或方法
console.log(instance?.proxy?.$env); // "dev"</script>

3. 完善

代码可以正常执行,但还有一点小问题:不存在该属性或方法。

在这里插入图片描述

这是因为,我们自定义的全局变量和方法缺少 类型声明 ,所以我们需要手动补充声明。
这是固定格式,在 ComponentCustomProperties 中定义类型。

declare module "@vue/runtime-core" {export interface ComponentCustomProperties {$env: string;$fishingcat: () => string;}
}

如果数量多的话,可以专门创建一个 ***.d.ts 文件去补充类型声明,这里我图省事直接写在一起了。

global.ts

import type { App } from "vue";const fn = () => "鱼钓猫的小鱼干";export default {install(app: App) {app.config.globalProperties.$env = "dev";app.config.globalProperties.$fishingcat = fn;},
};declare module "@vue/runtime-core" {export interface ComponentCustomProperties {$env: string;$fishingcat: () => string;}
}

然后,一切恢复正常,完美结束!


http://www.mrgr.cn/news/47065.html

相关文章:

  • 关于编写测试用例的细枝末节
  • easyui datagrid表头和网格错位问题
  • 《跟我学Spring Boot开发》系列文章索引❤(2025.01.09更新)
  • Docker 的安装和基本使用[SpringBoot之Docker实战系列] - 第535篇
  • Vue.js 使用插槽(Slots)优化组件结构
  • 【Excel/WPS】根据平均值,随机输出三个范围在80到100的随机值。
  • C# 实现调用函数,打印日志(通过反射代理、非IOC)
  • 初级网络工程师之从入门到入狱(六)
  • IDEA使用Maven创建父与子多模块项目
  • ECharts图表图例6
  • Linux——cp-mv-rm命令
  • HarmonyOS媒体文件操作
  • C语言预处理详解(下)(31)
  • gray_range_rect是这样的
  • 四氟采水器耐强酸PTFE打水桶可应用水资源研究及环境监测
  • 浏览器对象属性
  • 什么是DHCP Snooping?到底工作在第几层?
  • <<迷雾>> 第10章 用机器做一连串的加法(5)--控制器 示例电路
  • 【银河麒麟高级服务器操作系统】安全配置基线相关分析全过程及解决方案
  • Python 如何使用 Redis 作为缓存
  • 如何提高浮点类型计算的精度
  • SQL练习代码(第一篇)
  • 软件测试工作中-商城类项目所遇bug点
  • 【QT上位机/嵌入式项目】基于IMX6ull--Bluez蓝牙健康助手上位机
  • JavaScript判断array中是否存在某几个元素、字符串中是否存在某几个字符串
  • 打不死的超强生命力