• vue项目


    前言:

    为了回顾学习的vue内容,将视频中一个大的项目里的购物车这一块单独拎出来写了个小demo。说难也不难,就是对所学的vue知识进行了个整合,实现了三个界面间的操作以及状态管理,但是说简单也不简单,虽然有点基础但写下来还是有些吃力。总的来说,这个小demo写完,对于vue算是能够独立上手了,也养成了看官方文档进行系统性的学习的习惯。本篇仅单独详细写vuex的使用。

    源代码于git上取:我的git 下载后请先看README.md文件

    项目结构(红框为主要内容)

    静态效果图:

    vuex

    Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex 也集成到 Vue 的官方调试工具 devtools extension ,提供了诸如零配置的 time-travel 调试、状态快照导入导出等高级调试功能。

    引入

    npm i vuex -S
    
    import Vuex from 'vuex'
    Vue.use(Vuex)
    

    基本使用

    const store = new Vuex.Store({
      state: {
        count: 0
      },
      mutations: {
        optCount (state,newValue) {
          state.count = newValue
        }
      },
      getters:{
         getCount(state){
           return '当前最新数据'+state.count
         }
      }
    })
    

    state

    vuex中的数据源,我们需要保存的数据就保存在这里,可以在页面通过this.$store.state来获取我们定义的数据;

    mutations

    如果需要修改store中的值唯一的方法就是提交mutation来修改。
    可以通过调用this.$store.commit('方法名', '唯一的参数')来实现,例:
    this.$store.commit('optCount', 1)

    getters

    Getter相当于vue中的computed计算属性,getter 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算。

    Getters 可以用于监听、state中的值的变化,返回计算后的结果。可以通过this.$store.getters.getCount来获取state中的数据

    购物车种vuex的使用

    该项目中我们使用vuex对购物车中的商品信息进行状态管理,所以只需要考虑用户对car的操作即可

    逻辑结构图

    [查看大图](https://img2020.cnblogs.com/blog/1019981/202003/1019981-20200319183208948-1603086993.png)

    vuex引入

    import Vuex from 'vuex'
    Vue.use(Vuex)
    //car数据从本地浏览器存储中获取
    var car = JSON.parse(localStorage.getItem('car') || '[]')
    const store = new Vuex.Store({
    
    })
    

    state

      state: {
        car: car
      },
    

    getters

      getters: {   // this.$store.getters.方法名
        //得到购物车中已选择的商品总量,用于在底部购物车图标上方的小红圈中显示
        getProdsSelectedCount(state) {  
          var count = 0;
          state.car.forEach(item => {
            if (item.selected) {
              count += item.count
            }
          })
          return count
        },
        //得到购物车种各个商品的数量,用于在购物车界面numbox中显示商品当前购买数量
        //返回数组,根据商品id来获取其数购买量$store.getters.getProdsCount[item.id]
        getProdsCount(state) {
          var o = []
          state.car.forEach(item => {
            o[item.id] = item.count
          })
          return o
        },
        //得到购物车种各个商品的选择状态,用于在购物车界面设置商品的选中状态
         //返回数组,根据商品id来获取其选中状态$store.getters.getProdsSelected[item.id]
        getProdsSelected(state) {
          var o = []
          state.car.forEach(item => {
            o[item.id] = item.selected
          })
          return o
        },
        //得到购物车总的选择数量和总价,用于在结算框中显示
        getGoodsCountAndAmount(state) {
          var o = {
            count: 0, // 勾选的数量
            amount: 0 // 勾选的总价
          }
          state.car.forEach(item => {
            if (item.selected) {
              o.count += item.count
              o.amount += item.price * item.count
            }
          })
          return o
        }
      }
    

    mutations

      mutations: { //this.$store.commit('方法名', '唯一的参数')
        // 商品页面'加入购物车'操作
        addToCar(state, product) {
          //判断是否已存在
          var flag = false
          state.car.some(item => {
            if (item.id == product.id) {
              item.count += parseInt(product.count)
              flag = true
              return true
            }
          })
          // 不存在,则添加
          if (!flag) {
            state.car.push(product)
          }
          //更新本地的localStorage
          localStorage.setItem('car', JSON.stringify(state.car))
        },
        //购物车界面删除商品
        removeFormCar(state, id) {
          // 根据Id,从store 中的购物车中删除对应的那条商品数据
          state.car.some((item, i) => {
            if (item.id == id) {
              state.car.splice(i, 1)
              return true;
            }
          })
          // 将删除完毕后的,最新的购物车数据,同步到 本地存储中
          localStorage.setItem('car', JSON.stringify(state.car))
        },
        // 购物车中更新商品的选中状态
        updateProdsSelected(state, info) {
          state.car.some(item => {
            if (item.id == info.id) {
              item.selected = info.selected
            }
          })
          localStorage.setItem('car', JSON.stringify(state.car))
        },
        //购物车种更新商品的购买数量
        updateprodsInfo(state, info) {
          state.car.some(item => {
            if (item.id == info.id) {
              item.count = info.count
            }
          })
          localStorage.setItem('car', JSON.stringify(state.car))
        },
      },
    
  • 相关阅读:
    iptables防火墙(RHEL6)
    漏洞扫描与网络抓包
    服务安全与监控
    Typecho反序列化漏洞
    python类,魔术方法等学习&&部分ssti常见操作知识点复习加深
    PHAR伪协议&&[CISCN2019 华北赛区 Day1 Web1]Dropbox
    [GXYCTF2019]禁止套娃 1 &无参数RCE
    PHP代码审计学习(1)
    Yii2安装完kartik组件后,使用时报错
    收藏博客
  • 原文地址:https://www.cnblogs.com/L-xmin/p/12525690.html
Copyright © 2020-2023  润新知