今天在專案中設定介面錯誤攔截時用到了axios報錯,
cannot set property ‘axios’ of undefined
解決方法:首先我們需要知道axios是一個庫,並不是vue中的第三方外掛,使用時不能通過Vue.use()安裝外掛,需要在原型上進行繫結,所以如何配合vue使用axios?
Vue 原本有一個官方推薦的 ajax 外掛 vue-resource,但是自從 Vue 更新到 2.0 之後,官方就不再更新 vue-resource
目前主流的 Vue 專案,都選擇 axios 來完成 ajax 請求
之前一直使用的是 vue-resource外掛,在主入口檔案引入import VueResource from 'vue-resource’之後,直接使用Vue.use(VueResource)之後即可將該外掛全域性參照了;
axios並沒有install 方法,所以是不能使用vue.use()方法的。
那麼難道每個檔案都要來參照一次?解決方法有很多種:
1.結合 vue-axios使用
2.axios 改寫為 Vue 的原型屬性
//npm
$ npm i axios -S
$ npm i vue-axios -S
//main.js
//全域性註冊 axios
import Vue from 'vue';
import axios from 'axios';
Vue.prototype.$axios = axios;//this.$axios使用
舉例:
this.$axios.get('api/getNewsList').then((response)=>{
this.newsList=response.data.data;
}).catch((response)=>{
console.log(response);
})
//或 vue-axios
import Vue from 'vue';
import axios from 'axios';
import vueAxios from 'vue-axios';
Vue.use(vueAxios,axios);//Vue.axios/this.axios/this.$http使用axios,一次封裝方便共同作業
舉例:
getNewsList(){
this.axios.get('api/getNewsList').then((response)=>{
this.newsList=response.data.data;
}).catch((response)=>{
console.log(response);
})規範
//template.vue
//模板中區域性引入
import axios from 'axios';//this.axios使用
雖然說有這兩種方式,但是在vue上掛載vue-axios老報錯
原來必須得這樣
vue-axios這個包來處理這個掛載問題。vue-axios 是在axios基礎上擴充套件的外掛,在Vue.prototype原型上擴充套件了$http等屬性,可以更加方便的使用axios。
npm 上對 vue-axios的解釋: https://www.npmjs.com/package/vue-axios