在vue的很多組件中都會用到axios來Post數據,每個組件中都寫上一個post的方法倒是也可以,復制就行了,但是總感覺有些不方便,那么可以把axios的post寫到一個單獨的js文件中,然后在需要的組件中引用豈不是更好嗎。
1、在assets文件下新建一個js文件
新建一個名稱為webpost.js文件
import axios from 'axios' //Post方法的封裝 function axiosPost(url,params){ return new Promise((resolve, reject) => { axios({ url: url, method: 'post', data: params, headers: { 'Content-Type':'application/json' } }) .then(res=>{ resolve(res.data); }); }); } export { axiosPost }
這個需要專門引用一下axios,也就是第一行,然后就可以使用了,最后一句很重要,不然你沒法在別的組件中調用
2、在需要使用此方法的組件中引用
<script> import {axiosPost} from '../assets/webpost'; export default { }
注意引用的路徑,import {}中的內容就是上面export中的內容
使用的時候連this都不需要了,直接axiosPost就可以了
axiosPost(url,params) .then(res=>{ if (res===401){ this.$message.error('哦,對不起,你所輸入的用戶名或密碼有誤!'); }else{
}
3、js的另一種寫法
下面是重新編輯的部分,這幾天又把axios部分整理了一下,加上了攔截器,用於向api請求時帶上token驗證,只多了一個export,可以寫多個,結構更清晰,更容易理解。
import axios from 'axios' //Post方法的封裝 export function axiosPost(url,params){ return new Promise((resolve, reject) => { //以下部分是攔截器功能 axios.interceptors.request.use(config=>{ const token=localStorage.getItem('token') if(token){ config.headers.authorization=token } return config },err=>{ }) //下面是正常的 axios({ url: url, method: 'post', data: params, headers: { 'Content-Type':'application/json' } }) .then(res=>{ resolve(res.data); }); }); }