首頁  >  問答  >  主體

javascript - 關於vuex,已知的是在元件中呼叫 dispatch 方法,傳回值是 undefined,不知是哪裡出了問題

用的vuex的modules

export const GET_TABGRADE = 'GET_TABGRADE'
    const tanjie = axios.create({
        baseURL: 'tanjie'
    })
    
    findGrade1: function () {
        return new Promise((resovle, reject) => {
            tanjie({
                url: '/content/findGrade1'
            }).then(response => {
                console.log('api is transfer')
                resovle(response.data)
            }).catch(error => {
                reject(error)
            })
        })
    },
import baseApi from '@/api/base'
import * as types from '../mutation-type'

const state = {
    tabGrade: {
        errno: 1,
        list: {}
    }
}

const getters = {
    getTabGrade: state => {
        state.tabGrade
    }
}

const actions = {
    // 调用api
    getTabGrade({ commit }) {
        console.log('is actions')
        return new Promise(function (resolve, reject) {
            baseApi.findGrade1()
                .then(res => {
                    commit(types.GET_TABGRADE, res)
                    resolve(res);   
                }).catch(err => {
                    console.log(err)
                })
        })

    }
}

const mutations = {
    [types.GET_TABGRADE](state, res) {
        
        state.tabGrade = {
            ...state.tabGrade,
            list: res.list
        }
        console.log(state.tabGrade)
        
    }
}

export default {
    state,
    getters,
    actions,
    mutations
}
  computed: {
    ...mapGetters([
      'getTabGrade'
    ]),
    
  created() {
    this.$store.dispatch('getTabGrade')
      .then(res => {
        console.log(res) // undefined
        return res
      })
      .catch(err => {
        console.log(err)
      })
  },

#各個模組的引用應該是沒有問題得,畢竟元件內可以透過 this.$store 來存取 state

但不知道為何 dispatch 會回傳 undefined

元件內可以得到正確的資料的,請問我該如何去使用,就像透過{{}}來展示一個grade1_name

我想大声告诉你我想大声告诉你2663 天前1659

全部回覆(2)我來回復

  • 给我你的怀抱

    给我你的怀抱2017-07-05 10:43:22

    加了return和resolve,不然this.$store.dispatch('getTabGrade')觸發呼叫可能沒有回傳有正確值的promise,你試試看。

    const actions = {
        // 调用api
        getTabGrade({ commit }) {
            console.log('actions')
             return baseApi.findGrade1()    //添加return
                .then(res => {
                    commit(types.GET_TABGRADE, res)
                    resolve(res);   //添加resolve
                }).catch(err => {
                    console.log(err)
                })
        }
    }
    
    

    回覆
    0
  • 怪我咯

    怪我咯2017-07-05 10:43:22

    已解決,我最後在模組的getter中做了處理:

    const getters = {
        getTabGrade: state => {
            console.log('getter',state.tabGrade)
            let tabGradeName = []
            for(var i =0; i<state.tabGrade.list.length; i++){
                tabGradeName.push(state.tabGrade.list[i].grade1_name)
            }
            return tabGradeName
        }
    }

    最終元件中使用模板語法將計算屬性寫了上去,
    html:

    <span>{{getTabGrade[0]}}</span>
    
    

    js:

      computed: {
        ...mapGetters([
          'getTabGrade'
        ])

    回覆
    0
  • 取消回覆