在vue3.0中,我们不能通过this在setup函数中来访问组件实例化对象,然而vue3.0就是提倡使用setup钩子来写数据。
vue2.0使用公共配置时一般绑定在原型上无论是否使用都在每一个组件的this链上,这样的设计不太友好,因此我们在vue3.0中为我们提供了专门公共数据配置的方式: globalProperties getCurrentInstance。
globalProperties和getCurrentInstance的使用:
在main.js文件中通过globalProperties配置公共数据:
import { createApp } from 'vue'
import App from './App.vue'
const app=createApp(App)//app为我们得到的Vue实例化对象
//使用globalProperties:
app.config.globalProperties.$***="公共数据"//这时这个公共属性就配置好了
app.mount('#app')//组件挂载到页面
?在其它组件中通过getCurrentInstance使用数据:
<script setup>
//首先导入getCurrentInstance这个API
? import { getCurrentInstance} from "vue";
? let obj=getCurrentInstance() //getCurrentInstance()获取当前组件实例对象
?let proxy=obj.proxy//当前组件的实例对象的proxy属性为一个对象其中存放的就是公共数据
//proxy.$***就可以取出公共数据
</script>
?注意:getCurrentInstance()只能在组合式API中使用才能得到当前组件的实例化对象。
以上就是公共数据的配置和使用。
axios网络请求工具的全局配置
1、首先在main.js文件中引入axios,这里需要我们npm i axios下载包到项目中。然后将axios方法添加为公共属性,在每个组件中就可以直接使用,不用再每个组件中再重复import导入axios;并同时配置AJAX请求时的公共网址
import { createApp } from 'vue'
import App from './App.vue'
import axios from "axios"//导入axios包
const app=createApp(App)
//配置公共网址
axios.defaults.baseURL="http://127.0.0.1:5173/api"
//添加为公共属性
app.config.globalProperties.$axios=axios
app.mount('#app')
?2、在组件中做网络请求时,通过getCurrentInstance()获得$axios这个方法
<script setup>
import { getCurrentInstance,onMounted } from "vue";
//解构赋值获得proxy对象,$axios就在其中
let {proxy}=getCurrentInstance()
//这时可以网络请求了,
onMounted(async ()=>{
let res = await proxy.$axios("/ajax")
//这里实际请求的网址为:http://127.0.0.1:5173/api/ajax
console.log(res);//得到后端ajax这个接口返回的数据
})
3、需要做网络代理,我们通过egg框架启动的服务器端口号为7001,而利用vite启动的项目端口为5173,如果直接去请求7001下的数据会存在跨域问题。因此我们需要通过配置服务器代理,请求当前5173服务器,让我们的后端服务器去帮我们请求7001下的数据,服务器端请求数据不会造成跨域问题。
在vite.config.js文件中:
export default defineConfig({ ?? ?plugins: [vue()], ?? ?server: { ?? ??? ?// port:"5173",//默认可以不写 ?? ??? ?// host:"localhost"//默认可以不写 ?? ??? ?proxy: { ?? ??? ??? ?'/api': { ?? ??? ??? ??? ?target: 'http://127.0.0.1:7001', // 代理的目标地址 ?? ??? ??? ??? ?rewrite: (path) => path.replace(/^\/api/, '/'), // 路径重写 ?? ??? ??? ??? ?changeOrigin: true, ?? ??? ??? ??? ?// secure: true, // target是否https接口 ?? ??? ??? ??? ?// ws: true, // target是否代理websockets ? ? ? ? ? ? ?? ?? ??? ??? ?} ?? ??? ?} ?? ?} })
如果是在在webpack环境下的项目
在vue.config.js中:
module.exports={ ?? ?lintOnSave:false, ?? ?devServer:{ ? ? ? //? port:"**",//默认可以不写 ? ? ? //? host:"localhost",//默认可以不写 ?? ??? ?proxy:{ ?? ??? ??? ?"/":{ ?? ??? ??? ??? ?target:"http://127.0.0.1:7001", ?? ??? ??? ??? ?changeOrigin:true, ?? ??? ??? ??? ?pathRewrite:{"^/":""} ?? ??? ??? ?} ?? ??? ?} ?? ?} }
|