vue3的getCurrentInstance获取当前组件实例

vue3的setup中没有this时需要使用getCurrentInstance()来获取。

在 Vue 3 中,getCurrentInstance 方法可以在组合式 API(Composition API)中获取当前组件实例。这个方法返回一个包含了组件实例的对象,你可以用它来访问组件的 props、attrs、slots 和 emit 方法等。

proxy:访问响应式数据和方法

ctx:访问属性和方法

注:ctx代替this只适用于开发阶段,如果将项目打包放到生产服务器上运行,就会出错,ctx无法获取路由和全局挂载对象的。此问题的解决方案就是使用proxy替代ctx

举例:

1、如果说我们要通过$refs来获取dom。

javascript 复制代码
<script setup>
  import { getCurrentInstance, onMounted } from "vue";

  const {proxy,ctx } = getCurrentInstance();

  onMounted(()=>{
    console.log(proxy.$refs.test_ref,ctx.$refs.test_ref)
  })
</script>

<template>
  <div>
    <div ref="test_ref">$refs获取</div>
  </div>
</template>

2、全局导入api接口方便使用

一个用于注册能够被应用内所有组件实例访问到的全局属性的对象
vue2的main.js

javascript 复制代码
import api from './api' // 导入api接口
Vue.prototype.$api = api

页面上使用时:

javascript 复制代码
this.$api

globalProperties是对 Vue 2 中 Vue.prototype 使用方式的一种替代,如果全局属性与组件自己的属性冲突,组件自己的属性将具有更高的优先级。
vue3的main.js

javascript 复制代码
import api from './api'
app.config.globalProperties.api = api

页面上使用时:

javascript 复制代码
import { getCurrentInstance, onMounted } from "vue";
const {proxy,ctx } = getCurrentInstance();
 onMounted(()=>{
   console.log(proxy.api)
 })
相关推荐
ATalk机器人16 分钟前
深入探讨:Node.js、Vue、SSH服务与SSH免密登录
vue.js·node.js·ssh
weixin_4541174024 分钟前
微信小程序实现拉起微信支付功能-最简单版
java·javascript·数据库·微信小程序·微信开放平台
leopai35 分钟前
一次性给你推荐20来款vscode主题,妈妈再也不用担心你的编码体验!
javascript·visual studio code
程序猿阿伟37 分钟前
在实际的网页开发中,LESS 相较于传统 CSS 的性能优势具体体现在哪些方面,又存在哪些可能的性能瓶颈?
前端·css·less
汪洪墩41 分钟前
mars3d实现GraphicLayer获取当前相机视角内的可视点位(矢量数据
前端·javascript·vue.js·chrome·webgl
Apifox.1 小时前
什么是 API Token 以及如何使用它
前端·后端·安全·学习方法·改行学it
microhex2 小时前
Mac Electron 应用如何进行签名(signature)和公证(notarization)?
javascript·macos·electron
知识入脑,头发不掉2 小时前
小程序-4(自定义组件:数据、属性、数据监听器、生命周期函数、插槽、父子通信、behaviors)
前端·小程序
小鼠米奇2 小时前
Vue 3.0 所采用的 Composition Api 与 Vue 2.x使用的Options Api 有什么区别
前端·javascript·vue.js
kuchin2 小时前
深入解析 Python 文件操作利器 —— shutil
linux·前端·python