vue3无法读取全局属性或者函数,this.$失效,app.config.globalProperties / Provide / Inject

之前在使用vue2时会坚持使用全局挂载函数或者变量来使用,十分方便
比如将网络请求接口封装在一个文件,然后挂载至全局

//main.js
import api from './api';
//全局变量
Vue.prototype.$api = api;

在需要使用的组件里直接this.$api就可以了

this.$api.someMethod();

但是vue3引入了组合式api写法,随之全局挂载变量或者函数的方法也随之改变

//main.js

import { createApp } from 'vue'
import App from './App.vue'
import api from './api';
const app = createApp(App)
// 官方推荐将全局变量写进 globalProperties下
//全局变量
//myOption 为自定义变量
app.config.globalProperties.myOption = 'myOption'
//全局函数其实也可以这样挂载:
//app.config.globalProperties.$api= api
//但是你无法再组合式api的写法里this.$api点出来,除非你使用了vue2的写法


app.mount('#app')

vue3推荐使用Provide / Inject 全局挂载变量或者函数

//main.js
import { createApp } from 'vue'
import api from './api';
import App from './App.vue'
const app = createApp(App)
//属性
app.provide('$test', '666')
//函数
app.provide('$api',api);

//组件内使用方法
import { inject } from 'vue'
//读取属性
const test = inject('$test')
//读取函数
 inject('$api').getToken(data).then(res=>{
   console.log(res)
  })

全局方法就是为了避免重复的引入操作,本来vue2直接this.$就方便多了,只能这样用了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值