美文网首页
简单介绍一下Vuex

简单介绍一下Vuex

作者: 苏码码 | 来源:发表于2018-10-31 17:53 被阅读0次

    vuex主要应用于Vue.js中管理数据状态的一个库,通过创建一个集中的数据存储,供程序中所有的组件访问;
    当我们开发一些中大型的项目或者说数据量比较大时,就会想起vuex,下面就用一个购物车添加商品的例子来了解一下vuex:
    实现效果如下图:在一个子组件中操作商品的添加,商品数量的加减,商品删除,另一个子组件中的数据也实时更新


    屏幕快照 2018-10-31 下午5.16.48.png

    1、安装:npm install vuex --save
    2、引用vuex,创建store实例:

    import Vue from 'vue'
    import Vuex from 'vuex'
    Vue.use(Vuex)
    export const store = new Vuex.Store({
      // 注意 Vuex.Store中的S要大写
    )}
    

    3、部分Vuex实现代码

    export const store = new Vuex.Store({
        // 单一状态树  设置属性
        state:{
          // 商品数组
            goodsList:[]
        },
        // 获取属性
        getters:{
            // 获取商品列表
            getterGoodsList(state){
                return state.goodsList;
            },
            // 获取所有商品的总价
            getterGoodsTotalPrice(state){
                var total = 0
                for (const key in state.goodsList) {
                    if (state.goodsList.hasOwnProperty(key)) {
                        const element = state.goodsList[key];
                        total = total + parseFloat(element.total)
                    }
                }
                return total
            }
        },
        // 改变数据状态
        mutations:{
            // 将新的商品添加到商品数组
            addGoodsToGoodsList(state,goods){
                state.goodsList.splice(0,0,goods);
            },
            // 修改选中商品的数量
            changeGoodsCount(state,payload){
                state.goodsList.forEach(element => {
                    if (element.goodsId == payload.goodsId) {
                        element.count = parseInt(element.count) + parseInt(payload.count);
                        element.total = parseInt(element.count) * parseFloat(element.price);
                    }
                })
            },
            // 根据商品id删除选中的商品
            deleteGoodsToGoodsList(state,item){
               state.goodsList.splice(state.goodsList.indexOf(item),1)
            }
        }
    })
    

    4、添加到购车

        addGoodsToCartAction() {
          if (this.name && this.price && this.count) {
            let goods = {
              name: this.name,
              price: this.price,
              count: this.count,
              total: this.count * this.price,
              goodsId: new Date().getTime()
            };
            this.$store.commit("addGoodsToGoodsList", goods);
            this.name = "";
            this.price = "";
            this.count = "";
          }
        }
    

    4、减少商品数量

        reduceGoodsCount(goodsId) {
          let payload = {
            goodsId: goodsId,
            count: -1
          };
          this.$store.commit("changeGoodsCount", payload);
        }
    

    5、增加商品数量

    addGoddsCount(goodsId) {
          let payload = {
            goodsId: goodsId,
            count: 1
          };
          this.$store.commit("changeGoodsCount", payload);
        }
    

    具体代码详见:https://github.com/zzsuyifeng/vuexDemo/tree/vuex

    相关文章

      网友评论

          本文标题:简单介绍一下Vuex

          本文链接:https://www.haomeiwen.com/subject/qaoatqtx.html