- 修改原型鏈
//main.js
import axios from 'axios';
Vue.prototype.$ajax = axios; //修改原型鏈
// .vue文件
methods:{
getData(){
this.$ajax.get('https://easy-mock.com/mock/5d41481656e5d340d0338e4b/shop/commodity')
.then(res => {
console.log(res)
}).catch(err => {
console.log(err)
})
}
}
2.Vuex 結合 axios 封裝一個 actions
//store.js
import Vue from 'vue';
import Vuex from 'Vuex';
import axios from 'axios';
export const store = new Vuex.Store({
State: {
list: []
},
mutations: {
changeList(state,res){ // store中的數據只能通過commit mutation來改變
state.list = res.data.data.list
}
},
actions: {
getInfo(context) {
axios.get('https://easy-mock.com/mock/5d41481656e5d340d0338e4b/shop/commodity')
.then(res => {
context.commit('changeList',res)
}).catch(err => {
console.log(err)
})
}
}
})
// .vue文件
import {mapState,mapActions} from 'vuex'
export default {
name:"HelloWorld",
methods:{
...mapActions([
'getInfo' // 觸發actions里的 getInfo 函數,調動接口
])
},
computed:{
...mapState([
'list' // 獲取store里的數據,放在computed中可以實時更新
])
},
mounted() {
this.getInfo()
}
}
上述兩種方案是相互獨立的,也就是說,即使在main.js中引入了axios並修改了原型鏈,
在store.js中也不能直接使用this.$ajax,而是要引入axios后再使用。