Vue3引入axios封裝接口的兩種方法實例
更新時間:2022年05月24日 10:28:20 作者:HqL丶1024
在vue項目中,和后臺交互獲取數(shù)據(jù)這塊,我們通常使用的是axios庫,它是基于promise的http庫,下面這篇文章主要給大家介紹了關(guān)于Vue3引入axios封裝接口的兩種方法,需要的朋友可以參考下
第一種
1.安裝
npm install axios -S
2.新建一個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/' //測試 //post請求頭 axios.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded;charset=UTF-8"; //設(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ò)請求失敗,反饋給客服" }); } ); 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 { // 接口錯誤提示 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' //測試 //post請求頭 axios.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded;charset=UTF-8"; //設(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ò)請求失敗,請刷新重試" }); } ); 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就這樣寫 // }, // data // ) // } data ) ) const get = (url, params = {}) => http.get( url, Object.assign({ api_key: api_key, sign }, params ) ) // 接口說明 const getFissionCourseList = data => post('getFissionCourseList', data) const getGetrequs = params => get('getFissionCourseList', params) //接口導(dǎo)出 export { getFissionCourseList, getGetrequs }
5.頁面引入使用
<template> <div class="box"> <div class="yanjin"> <div class="demo" ref='seder' >歡迎來到VUE3</div> <div class="demo" @click="testClick" >歡迎來到VUE3</div> </div> <div @click="go">跳轉(zhuǎn)頁面</div> <div @click="getRquset"> 點我調(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 () => { // 進入頁面調(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue-cli 目錄結(jié)構(gòu)詳細講解總結(jié)
這篇文章主要介紹了vue-cli 目錄結(jié)構(gòu)詳細講解總結(jié),詳細的介紹了整個項目的目錄以及目錄文件的用法,非常具有實用價值,需要的朋友可以參考下2019-01-01nuxt框架中對vuex進行模塊化設(shè)置的實現(xiàn)方法
這篇文章主要介紹了nuxt框架中對vuex進行模塊化設(shè)置的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09使用vue-cli創(chuàng)建vue2項目的實戰(zhàn)步驟詳解
相信大部分Vue開發(fā)者都使用過vue-cli來構(gòu)建項目,它的確很方便,但對于很多初級開發(fā)者來說,還是要踩不少坑的,下面這篇文章主要給大家介紹了關(guān)于使用vue-cli創(chuàng)建vue2項目的實戰(zhàn)步驟,需要的朋友可以參考下2023-01-01vue19 組建 Vue.extend component、組件模版、動態(tài)組件 的實例代碼
這篇文章主要介紹了vue19 組建 Vue.extend component、組件模版、動態(tài)組件 的實例代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-04-04