鍍金池/ 問答/HTML/ Vue 在vuex 的store中調(diào)用axios方法不成功

Vue 在vuex 的store中調(diào)用axios方法不成功

import axios from 'axios'
Vue.prototype.$http = axios;
actions: {
    // 獲取未讀消息
    GetunderMessage({ commit }, loginToken) {
      const formData = new FormData();
      formData.append('token', loginToken);
      formData.append('app', '0');
      console.log(formData);
      this.$http.post('http://192.168.16.221:8090/member_api/unreadMessage', formData).then(response => {
        var res = response.data.data;
        console.log(res);
        commit('SET_unreadMessage', res.length);
      }).catch(error => {
        console.log(error);
      });
    }
  }

提示: Cannot read property 'post' of undefined

回答
編輯回答
笨小蛋

在 這里 this的指向應(yīng)該是 Store,應(yīng)該在頂部單獨引入 axios后不要在將 axios繼承到vue原型上了

import axios from 'axios'
...
...

actions: {
    // 獲取未讀消息
    GetunderMessage({ commit }, loginToken) {
      const formData = new FormData();
      formData.append('token', loginToken);
      formData.append('app', '0');
      console.log(formData);
      axios.post('http://192.168.16.221:8090/member_api/unreadMessage', formData).then(response => {
        var res = response.data.data;
        console.log(res);
        commit('SET_unreadMessage', res.length);
      }).catch(error => {
        console.log(error);
      });
    }
  }

希望能幫助到你

2017年11月11日 09:57
編輯回答
避風(fēng)港
可以在你的入口文件中把axios定義為全局變量使用,這樣就不用重復(fù)的在每個vuex模塊中重復(fù)導(dǎo)入vue或者axios了,如果你使用的是vue-cli創(chuàng)建的工程,直接在main.js里添加如下代碼:
window.axios = require('axios');
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
vuex中就可以直接使用以下方式直接調(diào)用axios
axios.post()
2017年11月2日 22:30
編輯回答
忠妾

this.$http
實在app.vue里掛載的axios,
在這里你要用axios

2018年1月26日 01:40
編輯回答
不歸路

this指向不對,這里并不是組件中,this并沒有繼承vue對象的方法

2018年4月28日 01:53
編輯回答
懶洋洋

this的指向不對的

axios.post()
2018年6月27日 08:13
編輯回答
落殤

兩段代碼在兩個文件嗎, 如果你第一段代碼將單獨寫了一個全局組件的或別忘記在main.js通過Vue.use(xx)調(diào)用, 然后在第二段代碼中就可以Vue.$http.post, 這有個框架挺好的, 你可以參照一下N3-admin

2017年5月5日 02:39
編輯回答
荒城

給一個標準答案,望采納:

import Vue from 'vue'
// 這里直接引入Vue這個包
...
...

actions: {
    // 獲取未讀消息
    GetunderMessage({ commit }, loginToken) {
      const formData = new FormData();
      formData.append('token', loginToken);
      formData.append('app', '0');
      console.log(formData);
      // 因為之前已經(jīng)實例化了,所以這里調(diào)用返回的是掛載好`$http`方法的Vue實例
      Vue.$http.post('http://192.168.16.221:8090/member_api/unreadMessage', formData).then(response => {
        var res = response.data.data;
        console.log(res);
        commit('SET_unreadMessage', res.length);
      }).catch(error => {
        console.log(error);
      });
    }
  }
2017年7月20日 05:52