这个需求vuex能实现吗

这个时间提问,的确有点煞风景 先祝各位七夕快乐吧

下面进入正题

我是vue新人,虽然时间长,但总是断断续续,也没多深入(惭愧,主要悟性差).最近看了慕课网上的高仿饿了么视频,边看,边把它改成vue2,当然这是简单的.但是有个东西,我是想引入vuex来实现的

这是demo链接描述

clipboard.png

这是demo打开就能看到的

clipboard.png

这是点击食物的详情页

我想说的我是能不能用vuex来管理同一种食物的加号减号的状态,但是各个食物间又是互相独立,互不干涉的呢.我看了很长时间vuex的文档,发现modules的模块重用好像有那么点意思

clipboard.png

但是好像又说不过去

不知道我的思路对不对

以下是我的vuex代码

mutations.js

const state = {
    totalPrice: 0
}

const myModule = {
    state() {
        return {
            count: 0
        }
    },
    actions: {
        ADDCART({
            state,
            commit,
            rootState
        }, price) {
            commit('ADDCART', price)
        },
        DECREASECART({
            state,
            commit,
            rootState
        }, price) {
            commit('DECREASECART', price)
        }
    },
    mutations: {
        ADDCART({
            state,
            rootState
        }, price) {
            state.count++
                rootState.totalPrice += price
        },
        DECREASECART({
            state,
            rootState
        }, price) {
            state.count--
                rootState.totalPrice -= price
        }
    },
    getters: {
        count(state, getters, rootState) {
            return state.count
        }
    }
}

const getters = {
    count: state => state.totalPrice
}

export default {
    // mutations,
    state,
    myModule,
    getters
}

index.js

import mutations from './mutations.js'

Vue.use(Vuex)

export default new Vuex.Store({
    modules: {
        mutations
    }
})

另外我想问一下,modules里面的action怎么触发啊,我触发不了

这是加号,减号组件里面的代码

<script>
import { mapGetters, mapActions } from 'vuex'

export default {
    props: {
        food: {
            type: Object
        }
    },
    computed: {
        ...mapGetters(['count'])
    },
    methods: {
        ...mapActions(['some/nested/module/mutations']),
        addCart($event) {
            if (!$event._constructed) {
                return
            }
            this.$store.dispatch('ADDCART', this.food.price)
        },
        decreaseCart($event) {
            if (!$event._constructed) {
                return
            }
            this.$store.dispatch('DECREASECART', this.food.price)
        }
    }
}
</script>

能看到这里,不管有没有解答,我都感谢各位,再次祝各位节日快乐,单身的早点找到另一半

阅读 2.3k
2 个回答

1.可以把列表数据存进vuex的state,结构比如像这样:
[{'id':'1', 'title':'皮蛋瘦肉粥', 'count':'1', 'price':'10', ...}, {'id':'2', 'title':'皮蛋瘦肉粥2', 'count':'0', 'price':'15', ...}]

进入detail页面的时候,可以根据id,取出相应的obj,然后操作count

2.ADDCART 和 DECREASECART 操作的是另一个state里面的数组。这样就不用写module了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题