赞
踩
在 vue2.x 中我们通过给 vue 实例的原型绑定全局变量的方法来定义全局属性
/* 挂载全局属性
Vue.prototype.$axios = axios;
Vue.prototype.$utils = Utils;
*/
new Vue({
router,
store,
render: h => h(App)
}).$mount('#app')
那么,在 vue3 中如何全局绑定 axios, router, store呢?
config.globalProperties.$axios=axios
首先在入口文件 main.ts 中通过 createApp() 创建 vue 根实例,在根实例上绑定axios,
安装npm i axios
main.ts
import { createApp } from 'vue'
import axios from 'axios'
import App from './App.vue'
const app = createApp(App)
// 通过 config.globalProperties
app.config.globalProperties.$axios = axios
app.mount('#app')
<script setup lang="ts"> import { ref, getCurrentInstance, reactive } from 'vue' // const list = ref<any[]>() const list = reactive([]) // 使用 const currentInstance: any = getCurrentInstance() const { $axios } = currentInstance.appContext.config.globalProperties /** 获取全局绑定的$axios, router, store等 第一种方法 const currentInstance = getCurrentInstance() const { $axios } = currentInstance.appContext.config.globalProperties 第二种方法 const { proxy } = getCurrentInstance() 通过 proxy.$axios,其实这里的 proxy 就相当于 this 通过打印console.log('currentInstance', currentInstance) 我们可以看到许多绑定到根实例上全局属性都可以获取到。 * */ const getData = (): any => { console.log('hellow') $axios({ url: 'http://jsonplaceholder.typicode.com/posts', }) .then((res: any) => { // list.value = res.data // 1.可以通过.value赋值 list.push(...res.data) // 2.或者通过push(...res)赋值 }) .catch(new Error('服务器错误')) } </script> <template> <button @click="getData">请求数据</button> <ul> <li v-for="item in list" :key="item.Id">{{ item.Id }}{{ item.title }}</li> </ul> </template> <style scoped></style>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。