Vue3 全局实例上挂载属性方法案例讲解

作者:旧梦星轨 时间:2023-07-02 16:46:14 

导语

在大多数开发需求中,我们有时需要将某个数据,或者某个函数方法,挂载到,全局实例身上,以便于,在项目全局的任何位置都能够调用其方法,或读取其数据。

在Vue2 中,我们是在 main.js 中 直接将数据或者方法绑定在 Vue.prototype 身上,在页面中,可以直接通过 this.事件名或数据名 就能够拿到数据。

let art = () => {
 alert("事件方法")
}
import Vue from 'vue'
Vue.prototype.$art = art

页面中 通过 this 拿取到数据方法。

mounted() {
       this.$art()
   }

如今在 Vue3 中,结合了组合式 Api ,在 setup 函数中,我们无法获取到 this,所以这样的需求实现,就得到了变更。 Vue3 提供了一个新的 Api globalProperties,用来实现这样的需求。

Vue3 全局实例上挂载属性方法案例讲解

案例中,在 main.js 中定义好一个回调函数的方法。

import { createApp } from 'vue';
import App from './App.vue'
const app = createApp(App)
let art = () => {
 alert("事件方法")
}
app.config.globalProperties.art = art      //  通过 globalProperties  将回调函数绑定在全局
app.mount('#app')

页面中读取 需要借助于使用 getCurrentInstance Api 钩子

方法一

<script setup>
import { getCurrentInstance } from "vue"   // 引用 getCurrentInstance
//  getCurrentInstance().appContext.config.globalProperties 获取全局上下文,可以解构得到 我们前面绑定的数据方法
const { art } = getCurrentInstance().appContext.config.globalProperties
let clicklogin = (formName) => {
 art()     //直接调用方法本身
}
</script>

方法二

<script setup>
import { getCurrentInstance } from "vue"
const { proxy } = getCurrentInstance()    //获取 getCurrentInstance 身上的 proxy 代理属性
let clicklogin = (formName) => {
 proxy.art()           //可以直接在 proxy代理属性身上调用方法。
}
</script>

有细心的小伙伴,会发现 getCurrentInstance 这个Api 在官方文档中,查询不到,这是因为,在最新的V3 官方文档中,对 getCurrentInstance 进行了移除。

Vue3 全局实例上挂载属性方法案例讲解

至于为何现在还能使用,据说是现在 作为一个隐式的内部 Api 使用

上面提到的方法,虽然可以通过 app.config.globalPropertiesgetCurrentInstance 来定义全局方法数据,和读取数据,但是这种方法,并不推荐使用,如下,官方的描述

Vue3 全局实例上挂载属性方法案例讲解

相比于上面提到的方法,我们更推荐使用 provide 以及 inject 来实现全局挂载数据方法。

在main.js 中

import { createApp } from 'vue';
import App from './App.vue'
const app = createApp(App)
let art = () => {
 alert("事件方法")
}
app.provide("art", art)    //将要挂载的参数, 通过 provide ,注入给后代实例
app.mount('#app')

页面中:

<script setup>
import { inject } from "vue"
let art = inject("art")      //  通过 inject 可以获取到 全局实例上 通过 provide  所注入的参数值。
let clicklogin = (formName) => {
   art()
}
</script>

来源:https://blog.csdn.net/qq_60961397/article/details/130343817

标签:Vue3,挂载,全局属性
0
投稿

猜你喜欢

  • python字符串大小写转换的三种方法

    2021-11-09 15:04:51
  • MySQL里实现类似SPLIT的分割字符串的函数

    2024-01-22 15:41:54
  • Python requests HTTP验证登录实现流程

    2021-02-27 16:43:04
  • Python GUI自动化实现绕过验证码登录

    2023-06-25 05:18:25
  • 一文详细谈谈GoLang的panic和error

    2024-05-13 10:45:15
  • 如何获取numpy array前N个最大值

    2022-02-08 18:48:28
  • 交互设计实用指南系列(1) – “有效性”之“操作入口明确”

    2009-12-11 18:42:00
  • 加快Vue项目的开发速度的方法

    2024-04-28 10:50:20
  • python广度搜索解决八数码难题

    2023-01-26 18:12:43
  • 擦除式图片轮番显示效果

    2013-08-10 11:01:48
  • mysql8.0.19基础数据类型详解

    2024-01-25 22:38:57
  • Vue前端表格导出Excel文件的图文教程

    2024-04-09 10:46:45
  • 浅析Python3爬虫登录模拟

    2023-10-10 18:15:02
  • Python编码时应该注意的几个情况

    2021-03-15 20:59:54
  • Python3 venv搭建轻量级虚拟环境的步骤(图文)

    2022-11-26 08:47:16
  • Python3几个常见问题的处理方法

    2022-08-04 10:48:56
  • 利用 Python 把小伙伴制作成表情包

    2022-08-14 16:57:46
  • HTML在线编辑器任意设置字号大小

    2007-08-29 19:55:00
  • CodeIgniter启用缓存和清除缓存的方法

    2023-11-22 17:04:55
  • Python实现telnet服务器的方法

    2023-01-21 22:45:18
  • asp之家 网络编程 m.aspxhome.com