Vue3引入axios封裝接口的兩種方法實(shí)例
第一種
1.安裝
npm install axios -S
2.新建一個(gè)http.js文件
import axios from "axios"; import qs from "qs"; import { Dialog, Toast } from "vant"; // axios.defaults.baseURL = 'http://hplqy.suoluomei.cn/index.php?s=/hfs/Api/' //正式 axios.defaults.baseURL = 'http://activitytest.hpl001.cn/crm_api/app/sinceOrder/' //測(cè)試 //post請(qǐng)求頭 axios.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded;charset=UTF-8"; //設(shè)置超時(shí) axios.defaults.timeout = 10000; axios.interceptors.request.use( config => { Toast.loading({ duration: 0, message: '加載中...', forbidClick: true, }); return config; }, error => { return Promise.reject(error); } ); axios.interceptors.response.use( response => { Toast.clear(); return response; }, error => { Toast.clear(); Dialog.alert({ title: "提示", message: "網(wǎng)絡(luò)請(qǐng)求失敗,反饋給客服" }); } ); export default function axiosApi(type, params, method) { let sign = process.env.VUE_APP_SIGN if (process.env.NODE_ENV === 'production') { sign = localStorage.getItem("wx_sign") } else { sign = 'crm:user:sign:f0c8cbe468f6a34463d198268290903f' } var value = { sign: sign } var data = method == "post" ? qs.stringify(Object.assign(value, params)) : Object.assign(value, params) return new Promise((resolve, reject) => { axios({ method: method, url: type, data: data }) .then(res => { if (res.data.errcode == 0) { resolve(res.data) } else { // 接口錯(cuò)誤提示 Toast.fail(res.data.msg); } }) .catch(err => { reject(err) }); }) };
3.使用
import axiosApi from "../utils/http";
tabsHttp() { axiosApi("getProductClassFromCrm", {}, "post").then((res) => { for (let i = 0; i < res.data.length; i++) { res.data[i].type = 0; } this.sebarList = res.data; }); },
第二種
1.安裝
npm install axios -S
2.新建
3.http.js
import axios from "axios"; import qs from "qs"; import { Dialog } from "vant"; // axios.defaults.baseURL = 'http://hp.suoluomei.cn/index.php' //正式 axios.defaults.baseURL = 'http://hp.suoluomei.cn/index.php' //測(cè)試 //post請(qǐng)求頭 axios.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded;charset=UTF-8"; //設(shè)置超時(shí) axios.defaults.timeout = 10000; axios.interceptors.request.use( config => { return config; }, error => { return Promise.reject(error); } ); axios.interceptors.response.use( response => { if (response.status == 200) { return Promise.resolve(response); } else { return Promise.reject(response); } }, error => { Dialog.alert({ title: "提示", message: "網(wǎng)絡(luò)請(qǐng)求失敗,請(qǐng)刷新重試" }); } ); export default { post(url, data) { return new Promise((resolve, reject) => { axios({ method: 'post', url, data: qs.stringify(data), }) .then(res => { resolve(res.data) }) .catch(err => { reject(err) }); }) }, get(url, data) { return new Promise((resolve, reject) => { axios({ method: 'get', url, params: data, }) .then(res => { resolve(res.data) }) .catch(err => { reject(err) }) }) } };
4.request.js
import http from './http' const api_key = '233d4cad34c34d343785s34dw3er3ds3234esd4' let sign = process.env.VUE_APP_SIGN if (process.env.NODE_ENV === 'production') { sign = localStorage.getItem("sign") } else { sign = '17a1920fdc3c3c25d1bf7c6dd724f5cf' } const post = (url, data = {}) => http.post( url, Object.assign({ api_key: api_key, sign, }, // { // data: Object.assign({ // role_id: role_id //如果需要再包層data就這樣寫(xiě) // }, // data // ) // } data ) ) const get = (url, params = {}) => http.get( url, Object.assign({ api_key: api_key, sign }, params ) ) // 接口說(shuō)明 const getFissionCourseList = data => post('getFissionCourseList', data) const getGetrequs = params => get('getFissionCourseList', params) //接口導(dǎo)出 export { getFissionCourseList, getGetrequs }
5.頁(yè)面引入使用
<template> <div class="box"> <div class="yanjin"> <div class="demo" ref='seder' >歡迎來(lái)到VUE3</div> <div class="demo" @click="testClick" >歡迎來(lái)到VUE3</div> </div> <div @click="go">跳轉(zhuǎn)頁(yè)面</div> <div @click="getRquset"> 點(diǎn)我調(diào)接口 </div> <meHome :text='132'></meHome> </div> </template> <script> import { getFissionCourseList, getGetrequs } from "../../utils/request"; import { reactive, toRefs, onMounted, onActivated } from "vue"; import meHome from "../me/me.vue"; import { async } from "q"; export default { components: { meHome, }, setup() { // data const state = reactive({ testMsg: "原始值", }); //onLand生命周期 onMounted(async () => { // 進(jìn)入頁(yè)面調(diào)用接口 init(); console.log(state.testMsg); }); // onshow生命周期 onActivated(async () => {}); // methods事件 const methods = { go() { this.$router.push({ path: "/main", query: { course_id: 123, }, }); }, testClick() { this.$nextTick(() => { this.$refs.seder.innerHTML = "更改了內(nèi)容"; }); }, async getRquset() { await getGetrequs({ t35: "get" }).then((res) => { console.log(res); }); }, }; const init = async () => { await getFissionCourseList({ t35: "post" }).then((res) => { // console.log(res); }); await getGetrequs({ t35: "get" }).then((res) => { // console.log(res); }); }; return { ...toRefs(state), ...methods, }; }, }; </script> <style src='./index.less' lang='less' scoped> </style>
總結(jié)
到此這篇關(guān)于Vue3引入axios封裝接口的兩種方法的文章就介紹到這了,更多相關(guān)Vue3引入axios封裝接口內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue 源碼分析之 Observer實(shí)現(xiàn)過(guò)程
這篇文章主要介紹了 Vue 源碼分析之 Observer實(shí)現(xiàn)過(guò)程,Observer 最主要的作用就是實(shí)現(xiàn)了touch -Data(getter) - Collect as Dependency這段過(guò)程,也就是依賴收集的過(guò)程,感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧2018-03-03vue 父組件通過(guò)$refs獲取子組件的值和方法詳解
今天小編就為大家分享一篇vue 父組件通過(guò)$refs獲取子組件的值和方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11vue-cli 目錄結(jié)構(gòu)詳細(xì)講解總結(jié)
這篇文章主要介紹了vue-cli 目錄結(jié)構(gòu)詳細(xì)講解總結(jié),詳細(xì)的介紹了整個(gè)項(xiàng)目的目錄以及目錄文件的用法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2019-01-01nuxt框架中對(duì)vuex進(jìn)行模塊化設(shè)置的實(shí)現(xiàn)方法
這篇文章主要介紹了nuxt框架中對(duì)vuex進(jìn)行模塊化設(shè)置的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09使用vue-cli創(chuàng)建vue2項(xiàng)目的實(shí)戰(zhàn)步驟詳解
相信大部分Vue開(kāi)發(fā)者都使用過(guò)vue-cli來(lái)構(gòu)建項(xiàng)目,它的確很方便,但對(duì)于很多初級(jí)開(kāi)發(fā)者來(lái)說(shuō),還是要踩不少坑的,下面這篇文章主要給大家介紹了關(guān)于使用vue-cli創(chuàng)建vue2項(xiàng)目的實(shí)戰(zhàn)步驟,需要的朋友可以參考下2023-01-01Vue實(shí)現(xiàn)可移動(dòng)水平時(shí)間軸
這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)可移動(dòng)水平時(shí)間軸,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06vue19 組建 Vue.extend component、組件模版、動(dòng)態(tài)組件 的實(shí)例代碼
這篇文章主要介紹了vue19 組建 Vue.extend component、組件模版、動(dòng)態(tài)組件 的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04