vue3+ts中对getCurrentInstance的使用

2023-11-02

1.在main.js中挂载一个全局属性。拿axios举例


import App from './App.vue';
import axios from './http'    //封装的axios方法
const app = createApp(App);    //创建应用
app.config.globalProperties.$axios = axios;//全局挂载
app.mount('#app')

2.在组件中使用axios

2.1方法一,使用 proxy

import { getCurrentInstance } from "vue";
const { proxy } = getCurrentInstance() ;
proxy.$axios.post(url).then(res=>{})

2.2 方法二

import { getCurrentInstance } from 'vue'
const currentInstance = getCurrentInstance()
const { $axios} = currentInstance.appContext.config.globalProperties
$axios(url).post(res => {})

以上方法,就是在vue中注册使用全局属性的方法。

注意:

我们在获取Vue3中全局挂载的方法时会这么写:

const { ctx } = getCurrentInstance()

这里的ctx不是setup提供的ctx,打包后在生产环境下是获取不到的。不可使用。

3.在ts中使用axios

以上方法在ts中,会报 类型“ComponentInternalInstance | null”上不存在属性“proxy”的错误

 以下分别对应两种方法,给出对应的解决方法

3.1方法一,proxy写法的解决方法

import { getCurrentInstance} from "vue";
import type { ComponentInternalInstance } from "vue";
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
//此时直接使用proxy.$axios会提示proxy可能为null,因此需要添加?来过滤null
proxy?.$axios.post(url).then(res=> {})

添加完?后又报以下错误

 解决方法为:src文件夹下创建一个如extendProperties.d.ts的文件,内容如下:

import { ComponentCustomProperties } from "@vue/runtime-core";

declare module "@vue/runtime-core" {
  interface ComponentCustomProperties {
    $axios: proxy; // 这里填类型
  }
}
// 必须导出,才能在其他文件中使用
export default ComponentCustomProperties;

 至此,第一种方法解决完毕。

3.2.第二种解决方法

创建一个useCurrentInstance.ts的hook

import { getCurrentInstance } from "vue";
import type { ComponentInternalInstance } from "vue";

export default function useCurrentInstance() {
  const { appContext } = getCurrentInstance() as ComponentInternalInstance;
  const globalProperties = appContext.config.globalProperties;
  return {
    globalProperties,
  };
}


/*在组件中使用
import useCurrentInstance from "@/hooks/useCurrentInstance";
const { globalProperties } = useCurrentInstance();
globalProperties.$axios(url).then(res=>{})
*/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue3+ts中对getCurrentInstance的使用 的相关文章

随机推荐

  • 在MaxOSX系统上安装gdb并给gdb制作证书

    在MacOSX系统上是默认没有安装gdb的 这给MacOSX应用开发人员调试OSX应用程序带来一定困难 因此在MacOSX上安装gdb对应用程序进行调试是一个很好的选择 但是在MacOSX上安装gdb并不想在Linux上那么容易安装 他有一
  • GD32_时钟配置解析

    GD32 时钟配置解析 本文以GD32F303型号为基础 依照标准库GD32F30x Firmware Library V2 1 5为例 作为笔记简单记录个人对其时钟配置的理解 后续会持续更新本篇笔记内容 文章目录 GD32 时钟配置解析
  • Source insight 4.0 暗色主题,模仿Atom one-darkv配色方案

    我是在MAC OS 10 12下使用crossover安装的 在wine环境下装4 0有个无法解决的bug是toolbar非常的宽 所以我取消了 反正用快捷键可以代替 关于wine安装之后界面模糊的问题请参考我这个帖子http blog c
  • consul安装

    consul安装 1 什么是consul 2 安装过程 2 1 下载 2 2 解压 使用unzip命令解压 在linux上这个时候就代表已经安装成功了 2 3 启动consul 2 4 访问consul的后台管理页面 其端口默认是8500
  • 【PTA】A-B

    本题要求你计算A B 不过麻烦的是 A和B都是字符串 即从字符串A中把字符串B所包含的字符全删掉 剩下的字符组成的就是字符串A B 输入格式 输入在2行中先后给出字符串A和B 两字符串的长度都不超过104 并且保证每个字符串都是由可见的AS
  • spring工程的单元测试用例加载配置方法

    spring开发时可以使用基于java注解的配置 也可以使用基于xml配置文件的配置方法 大多数情况下在开发过程中需要编写单元测试用例针对不同的模块进行独立测试用于验证独立的功能 本文介绍在基于不同的配置项目中单元测试加载配置的方法 1 基
  • springboot 使用 logback 进行日志记录、并对文件日志以日期和大小进行拆分的 demo 示例

    1 描述 一个springboot项目使用 logback 记录程序运行过程中的日志 配置 logback 生成控制台日志和文件日志记录 以及对文件日志以日期和大小进行拆分的 demo示例 环境 IDE idea 2021 3 JDK 1
  • 电源纹波的测量

    测试手法 A 使用纹波探头 DC 50ohm 用弹簧地连接到地上 然后将探头点到测试电源上 示波器打开20MHz的带宽限制 打开余晖模式 将测试通道的输出电压值移到示波器屏幕中间 让让示波器采样1 3分钟 最后看示波器上的峰峰值即可 B 使
  • CCSpriteFrameCache的用法

    转自 https www cnblogs com pengyingh articles 2436648 html 让我们首先创建一个工程骨架 使用cocos2d工程模板创建一个新的项目并取名为AnimBear 接下来 下载一些由我的老婆制作
  • qt day 5

    1 gt 实现闹钟功能 pro QT core gui texttospeech greaterThan QT MAJOR VERSION 4 QT widgets CONFIG c 11 The following define make
  • C# USB通讯

    关注 星标公众号 及时获取更多技术分享 作者 冰茶奥利奥 微信公众号 嵌入式电子创客街 项目工程文件下载 工程文件下载地址 看了很多网上的博客 讲述如何用C 进行USB设备操作 很多都是不对的 以至于南辕北辙 我们可以使用usb库 在c下有
  • 打开方式中无法添加程序,无法用指定程序打开

    用T32打开 ts2文件时 右击 打开方式 中 浏览 到t32start exe的安装目录 点击 确定 可是在 打开方式 中找不到t32start exe程序 可能是因为注册表中t32start exe程序的路径指定错误 原因 解压安装包
  • 通过自定义 Vue 指令实现前端曝光埋点

    前言 互联网发展至今 数据的重要性已经不言而喻 尤其是在电商公司 数据的统计分析尤为重要 通过数据分析可以提升用户的购买体验 方便运营和产品调整销售策略等等 埋点就是网站分析的一种常用的数据采集方法 埋点按照获取数据的方式一般可以分为以下
  • flink学习day05:checkpoint 原理与实践

    flink checkpoint checkpointe是什么 基于state出发 flink基于与state可以做非常多复杂的事情 但是state是存储在内存中 内存中的数据是不安全的易丢失的 所以flink为了解决这个问题就引入了che
  • 牛客网C语言编程初学者入门训练135题

    文章目录 1 实践出真知 2 我是大V 3 有容乃大 4 小飞机 5 反向输出四位数 6 大小写转换 7 缩短二进制 8 十六进制转十进制 9 printf的返回值 10 成绩输入输出 11 学生基本信息输入输出 12 字符金字塔 13 判
  • 线稿图视频制作--从此短视频平台不缺上传视频了

    博客首页 knighthood2001 欢迎点赞 评论 热爱python 期待与大家一同进步成长 给大家推荐一款很火爆的刷题 面试求职网站 跟我一起来巩固基础 开启刷题之旅吧 这年头还不来尝试线稿图视频 之前笔者也写过将视频转换为线稿图视频
  • 基于Docker的mysql主从复制

    目录 一 拉取mysql 二 启动两个mysql容器 2 1 主master 2 2 从slave 三 配置master 3 1 进入master内部配置 3 2 安装vim命令 3 3 重启mysql 3 4 创建数据同步用户 可不建 直
  • Linux重启nfs出现没有权限,Linux NFS搭建与错误提示解决

    Linux NFS搭建与错误提示解决 服务端设置 root server cat etc redhat release 查看操作系统版本信息 CentOS release 5 5 Final root server uname r 查看当前
  • 常见的错误-04

    引言 在公司配置新电脑环境时候 在安装和配置完所有VSCode软件以及C 环境后 ubuntun环境下 尝试使用debug进行代码调试 遇到了在debug过程中不输出结果的bug 如下图 未输出array以及zheli 解决方法 在ubun
  • vue3+ts中对getCurrentInstance的使用

    1 在main js中挂载一个全局属性 拿axios举例 import App from App vue import axios from http 封装的axios方法 const app createApp App 创建应用 app