uniapp使用Vue3 挂载全局方法

在uni-app中,全局API来挂载方法函数到全局是一种减少代码重复性,提高性能的非常常见的方法。

首先,我们需要先去简单了解一下uniapp中 main.js 文件中的代码含义:

import App from './App'

// #ifndef VUE3
import Vue from 'vue'
import './uni.promisify.adaptor'
Vue.config.productionTip = false
App.mpType = 'app'
const app = new Vue({
	...App
})
app.$mount()
// #endif


// #ifdef VUE3
import { createSSRApp } from 'vue'
export function createApp() {
	const app = createSSRApp(App)
	return {
		app
	}
}
// #endif

在最初代码设计中,为了兼容不同版本的Vue,确保能同时在Vue2Vue3中运行,采用了不同的初始化方式,并通过 // #ifdef VUE3 进行环境判断初始化。 

当然,在不同的Vue环境中挂载全局的方法,理所当然的会有所不同,因为 Vue 3 不再使用 Vue.prototyp ,而是通过 app.config.globalProperties 来定义全局方法或属性,将全局函数挂载到Vue实例上。

以下是修改后的代码(Vue3环境下挂载全局方法):

// #ifdef VUE3
import { createSSRApp } from 'vue'
import request from '@/utils/request.js'
import notify from '@/utils/notify.js'

export function createApp() {
  const app = createSSRApp(App)
  
   // 挂载全局方法 网络请求 消息提示
  app.config.globalProperties.$request = request
  app.config.globalProperties.$notify = notify
  
  return {
    app
  }
}
// #endif

然后,我们就可以在页面中使用这个全局方法: getCurrentInstance().proxy 

onLoad() {
	this.$notify.toast('普通提示');
    console.log(this.$request);
},

值得注意的是:在Vue3的 setup() 中,不可以直接访问 this ,需要通过访问 getCurrentInstance().proxy 全局方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亭瞳^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值