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

这篇具有很好参考价值的文章主要介绍了Vue3 全局实例上挂载属性方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


导语

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

在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>

以上就是给大家带来的,有关于在 Vue3 中,如何实现全局挂载属性方法。


🚵‍♂️ 博主座右铭:向阳而生,我还在路上!
——————————————————————————————
🚴博主想说:将持续性为社区输出自己的资源,同时也见证自己的进步!
——————————————————————————————
🤼‍♂️ 如果都看到这了,博主希望留下你的足迹!【📂收藏!👍点赞!✍️评论!】
——————————————————————————————文章来源地址https://www.toymoban.com/news/detail-434628.html

到了这里,关于Vue3 全局实例上挂载属性方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue实例挂载的过程

    我们都听过知其然知其所以然这句话 那么不知道大家是否思考过new Vue()这个过程中究竟做了些什么? 过程中是如何完成数据的绑定,又是如何将数据渲染到视图的等等 首先找到vue的构造函数 源码位置:srccoreinstanceindex.js options是用户传递过来的配置项,如data、methods等常用

    2024年02月11日
    浏览(34)
  • vue实例挂载过程

    以下仅为个人见解。  new Vue()时会调用initMixin(Vue)将_init挂载到vue原型上; 在_init()中调用$mount()方法($mount()方法也是挂载到vue原型上的)编译template模版,并生成render()函数; 挂载到vm上后,会再次调用$mount()并返回调用mountComponet()方法,mountComponet中的updateComponent()方法调用vue原

    2024年02月12日
    浏览(35)
  • vue基础知识四:Vue实例挂载的过程

    一、思考 我们都听过知其然知其所以然这句话 那么不知道大家是否思考过new Vue()这个过程中究竟做了些什么? 过程中是如何完成数据的绑定,又是如何将数据渲染到视图的等等 一、分析 首先找到vue的构造函数 源码位置:srccoreinstanceindex.js options是用户传递过来的配置项,

    2024年02月12日
    浏览(41)
  • vue3全局注册组件

    我们在封装组件的时候一般情况下都是在 components 文件夹下写自己的组件,然后再 views 下写对应的页面然后引入自己封装的组件,比如这样: views下的chooseArea的index.vue想要引入components下的chooseArea-src-index.vue就得这样写: 这只是个引入组件的例子,也就是说 每当我们在页面

    2024年02月12日
    浏览(39)
  • Vue3---组件全局注册

    1. 组件封装成插件 2. 引用注册 3. 使用组件

    2024年02月13日
    浏览(37)
  • Vue3 全局路由的使用

    一. App.vue 二. main.js 三. /router/index.js

    2024年02月10日
    浏览(41)
  • vue3 使用全局svg

    vite-plugin-svg-icos -D  包 不行就再安装 fast-glob -D main 引入 import \\\'virtual:svg-icons-register\\\' import SvgIcon from \\\'@/components/SvgIcon\\\' src 同级目录新建vite文件夹下的 plugins 文件夹 建一个svg-icon.js    和index.js 文件   在vite.config.js文件里  main.js 中注册 app.component(\\\'svg-icon\\\', SvgIcon) component文件新

    2024年02月08日
    浏览(36)
  • Vue3如何像在prototype(原型)上挂载数据

    1. 首先,由于Vue团队对原型链的封装和改进, Vue3无法像Vue2一样直接在原型上放置数据 , 下面是Vue2的做法: 2. 在原型上挂载数据的作用是为了所有组件都可以通过 this. 获取到挂载的这个数据,  如果Vue3想要达到同样的效果,即(所有组件都可以通过this.myName获取到张三)

    2024年02月13日
    浏览(34)
  • 关于uniapp全局挂载变量/方法的问题,没遇到过点进来吧,记录一下我踩过的坑。

    事情是这样的,我在用uniapp做一个微信小程序,遇到了个问题,是在封装uni.request()到全局方法的时候,其实就很简单的,是关于 this的指向问题 (若想了解此问题的话,点这里去看大佬的文章!!!) ,找几个小时的博客都未能解决。 建uniapp项目时用了vue3,那么就要遵

    2024年02月16日
    浏览(48)
  • vue3中批量全局注册组件

    学习的时候顺便记录一下,用于个人学习使用vite+vue3+ts,如果想直接看批量注册全局组件的,看文章目录,直接点目录跳转即可 在vue中,我们在main.ts引入的全局注册的组件是可以不需要import导入而直接使用的。使用的时候是自己全局注册组件时的名称,而不是组件名。如下

    2024年02月04日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包