Vue3?全局實(shí)例上掛載屬性方法案例講解
導(dǎo)語
在大多數(shù)開發(fā)需求中,我們有時(shí)需要將某個(gè)數(shù)據(jù),或者某個(gè)函數(shù)方法,掛載到,全局實(shí)例身上,以便于,在項(xiàng)目全局的任何位置都能夠調(diào)用其方法,或讀取其數(shù)據(jù)。
在Vue2 中,我們是在 main.js 中 直接將數(shù)據(jù)或者方法綁定在 Vue.prototype 身上,在頁面中,可以直接通過 this.事件名或數(shù)據(jù)名 就能夠拿到數(shù)據(jù)。
let art = () => {
alert("事件方法")
}
import Vue from 'vue'
Vue.prototype.$art = art頁面中 通過 this 拿取到數(shù)據(jù)方法。
mounted() {
this.$art()
}如今在 Vue3 中,結(jié)合了組合式 Api ,在 setup 函數(shù)中,我們無法獲取到 this,所以這樣的需求實(shí)現(xiàn),就得到了變更。 Vue3 提供了一個(gè)新的 Api globalProperties,用來實(shí)現(xiàn)這樣的需求。

案例中,在 main.js 中定義好一個(gè)回調(diào)函數(shù)的方法。
import { createApp } from 'vue';
import App from './App.vue'
const app = createApp(App)
let art = () => {
alert("事件方法")
}
app.config.globalProperties.art = art // 通過 globalProperties 將回調(diào)函數(shù)綁定在全局
app.mount('#app')頁面中讀取 需要借助于使用 getCurrentInstance Api 鉤子
方法一:
<script setup>
import { getCurrentInstance } from "vue" // 引用 getCurrentInstance
// getCurrentInstance().appContext.config.globalProperties 獲取全局上下文,可以解構(gòu)得到 我們前面綁定的數(shù)據(jù)方法
const { art } = getCurrentInstance().appContext.config.globalProperties
let clicklogin = (formName) => {
art() //直接調(diào)用方法本身
}
</script>方法二:
<script setup>
import { getCurrentInstance } from "vue"
const { proxy } = getCurrentInstance() //獲取 getCurrentInstance 身上的 proxy 代理屬性
let clicklogin = (formName) => {
proxy.art() //可以直接在 proxy代理屬性身上調(diào)用方法。
}
</script>有細(xì)心的小伙伴,會(huì)發(fā)現(xiàn) getCurrentInstance 這個(gè)Api 在官方文檔中,查詢不到,這是因?yàn)?,在最新的V3 官方文檔中,對 getCurrentInstance 進(jìn)行了移除。

至于為何現(xiàn)在還能使用,據(jù)說是現(xiàn)在 作為一個(gè)隱式的內(nèi)部 Api 使用。
上面提到的方法,雖然可以通過 app.config.globalProperties 和 getCurrentInstance 來定義全局方法數(shù)據(jù),和讀取數(shù)據(jù),但是這種方法,并不推薦使用,如下,官方的描述

相比于上面提到的方法,我們更推薦使用 provide 以及 inject 來實(shí)現(xiàn)全局掛載數(shù)據(jù)方法。
在main.js 中
import { createApp } from 'vue';
import App from './App.vue'
const app = createApp(App)
let art = () => {
alert("事件方法")
}
app.provide("art", art) //將要掛載的參數(shù), 通過 provide ,注入給后代實(shí)例
app.mount('#app')頁面中:
<script setup>
import { inject } from "vue"
let art = inject("art") // 通過 inject 可以獲取到 全局實(shí)例上 通過 provide 所注入的參數(shù)值。
let clicklogin = (formName) => {
art()
}
</script>以上就是給大家?guī)淼模嘘P(guān)于在 Vue3 中,如何實(shí)現(xiàn)全局掛載屬性方法。
到此這篇關(guān)于Vue3 全局實(shí)例上掛載屬性方法的文章就介紹到這了,更多相關(guān)Vue3掛載全局屬性內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue實(shí)現(xiàn)隨機(jī)驗(yàn)證碼功能(完整代碼)
驗(yàn)證碼功能在我們的身邊用處極廣,今天小編給大家分享基于vue實(shí)現(xiàn)隨機(jī)驗(yàn)證碼功能,感興趣的朋友跟隨小編一起看看吧2019-12-12
vue3二次封裝element-ui中的table組件的過程詳解
這篇文章主要給大家介紹了vue3二次封裝element-ui中的table組件的過程,文中通過代碼示例給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友跟著小編一起來學(xué)習(xí)吧2024-01-01
VUE+elementui面包屑實(shí)現(xiàn)動(dòng)態(tài)路由詳解
今天小編就為大家分享一篇VUE+elementui面包屑實(shí)現(xiàn)動(dòng)態(tài)路由詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11
vue3組合式API實(shí)現(xiàn)todo列表效果
這篇文章主要介紹了vue3組合式API實(shí)現(xiàn)todo列表,下面用組合式?API的寫法,實(shí)現(xiàn)一個(gè)可新增、刪除的todo列表效果,需要的朋友可以參考下2024-08-08
vue父子組件傳值不能實(shí)時(shí)更新的解決方法
Vue是一個(gè)以數(shù)據(jù)驅(qū)動(dòng)、組件化的前端框架,其中組件化是Vue中較為重要的概念之一,組件之間的通信則成為Vue中較為普遍的需求,下面這篇文章主要給大家介紹了關(guān)于vue父子組件傳值不能實(shí)時(shí)更新的解決方法,需要的朋友可以參考下2023-05-05
VUE在for循環(huán)里面根據(jù)內(nèi)容值動(dòng)態(tài)的加入class值的方法
這篇文章主要介紹了VUE在for循環(huán)里面根據(jù)內(nèi)容值動(dòng)態(tài)的加入class值的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-08-08
解決Vue + Echarts 使用markLine標(biāo)線(precision精度問題)
這篇文章主要介紹了解決Vue + Echarts 使用markLine標(biāo)線(precision精度問題),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07

