Maison  >  Questions et réponses  >  le corps du texte

javascript - Concernant Vuex, ce que l'on sait, c'est que la méthode de répartition est appelée dans le composant et que la valeur de retour n'est pas définie.

Utiliser vuexmodules

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)
      })
  },

Il ne devrait y avoir aucun problème pour référencer chaque module, après tout, les composants peuvent passer this.$store 来访问 state

Mais je ne sais pas pourquoi dispatch 会返回 undefined

Les données correctes peuvent être obtenues dans le composant. Comment puis-je l'utiliser, comme afficher un nom de grade1 via {{}}

我想大声告诉你我想大声告诉你2663 Il y a quelques jours1656

répondre à tous(2)je répondrai

  • 给我你的怀抱

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

    Ajout du retour et de la résolution, sinon l'appel déclenché par this.$store.dispatch('getTabGrade') risque de ne pas renvoyer une promesse avec la valeur correcte. Veuillez l'essayer.

    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)
                })
        }
    }
    
    

    répondre
    0
  • 怪我咯

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

    Résolu, j'ai finalement fait quelques traitements dans le getter du module :

    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
        }
    }

    Les propriétés calculées sont écrites dans le composant final en utilisant la syntaxe du modèle,
    html :

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

    js :

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

    répondre
    0
  • Annulerrépondre