使用vue2 + vuex + vue-cli + localStorage + less,实现本地储存的购物车。

安装

1
git clone https:
1
cd sls-vuex
1
npm install
1
npm run dev

开始

为了熟悉vuex,做了一个小小的尝试。关于vue-clivuex的安装就不表了。将购物车划分为三个组件模块,分别是商品信息、购物车信息及总计信息。而商品信息中可能关于几个状态,增加、添加、删除单项、清空购物车等。使用vuex进行状态管理有利于维护。

在vuex中使用这样的方式进行管理:

[]

组件调用actions,异步分发到mutation修改state,经过getters处理过后更新到各组件中,state通过localStorage储存数据到本地。

该项目的文件结构:

.
├── build
├── ......
├── src
│ ├── store
│ │ └── index.js
│ │ └── cart
│ │ └── action.js
│ │ └── getters.js
│ │ └── mutation_types.js
│ │ └── mutation.js
│ │ └── state.js
│ │ └── index.js
│ ├── components
│ │ └── cart.vue
│ │ └── info.vue
│ │ └── list.vue
│ └── main.js
.

状态管理

举例关于vuex状态管理的一个具体流程。当点击商品信息中的添加按钮时,actions分发到mutations中。在此之前,需在购物车中记录下各菜品的索引,这样才可以对各组数据进行相应操作。针对当前点击项state是否已经经过初始化,分为两个mutations分发。

1
2
3
4
5
6
7
8
9
10
11
12
methods: {
add_db(items) {
//在购物车中记录当前选项的curIndex,如果能找到索引值,则进入(A),否则进入(B)并且赋值属性到原始数据中,将其初始化
this.$store.dispatch('check_db',items.id)
if(){
//...this.$store.dispatch('add_db',items.id) (A)
}else {
//...this.$set(data.dataList,num,1)
//...this.$store.dispatch('create_db',items) (B)
}
}
}

触发了action之后,在store/cart/actions中注册这两个action,接收相应的参数。

1
2
3
4
5
export default {
check_db: ({commit},id) => commit('CHECK_DB',id),
add_db: ({commit},id) => commit('ADD_DB',id),
create_db : ({commit},obj) => commit('CREATE_DB',obj)
}

所以要注册相关的mutation

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
export default {
/**
(一) 检查能否在购物车数据中找到该项并且将其索引值初始化
*/
CHECK_DB(state,id) {
state.curIndex = -1
let list = state.cartList//购物车数据
if(list.length) {
for(let i = 0;i<list.length;i++){
大专栏  vuex-cart 介绍ss="line"> if(list[i].id === id){
state.curIndex = i
break
}
}
}
},
/**
(二) 购物车中已找到此项,将其对应num增加,并且把数据储存在localStorage中
*/
ADD_DB(state,id) {
state.cartList[state.curIndex].num = parseInt(state.cartList[state.curIndex].num)
state.cartList[state.curIndex].num++
localStorage.setItem('vuex_cart',JSON.stringify(state.cartList))
},
/**
(三) 购物车中没有找到此项,将该项的数据储存在购物车中
*/
CREATE_DB(state,obj) {
state.cartList.push(obj)
}
}

通过mutation修改了state,所以state.js中保留了所有关于菜品数据的内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
export default {
/**
1) 索引值
2) 总数量及总价格
3) 购物车数据
*/
curIndex: -1,
cartInfos: {
total_nums: 0,
total_price: 0
},
cartList: localStorage.getItem('vuex_cart') ?
JSON.parse(localStorage.getItem('vuex_cart')) :
[]
}

而组件中要获得state里的数据,就需要相关的getters

1
2
3
4
5
export default {
getCartList(state) {
return state.cartList
}
}

而把state、getters、mutation、getters组合起来形成一个index.js文件输出,组成一个module。即为store的模块化。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
store/cart/index.js
*/
import state from './state'
import getters from './getters.js'
import actions from './action'
import mutations from './mutations' export default{
state,
getters,
actions,
mutations
}

在store/index.js中创建一个store对象存放modules

1
2
3
4
5
6
7
8
9
10
11
import Vue from 'vue'
import Vuex from 'vuex'
import cart from './cart/' Vue.use(Vuex) export default new Vuex.Store({
modules: {
cart
}
})

完整的代码在这里

vuex-cart在线预览

vuex-cart 介绍的更多相关文章

  1. 【Vuex】vuex基本介绍与使用

    Vuex是什么? 官方解释: Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化.Vuex 也集 ...

  2. vuex教程,vuex使用介绍案例

    1.demopageaction: import Vue from "vue"; import Store from "../../store.js"; imp ...

  3. vuex详细介绍和使用方法

    1.什么是vuex? 官方的解释: Vuex是一个专为Vue.js应用程序开发的状态管理模式 当项目比较庞大的时候,每个组件的状态比较多,为了方便管理,需要把组件中的状态抽取出来,放入Vuex中进行统 ...

  4. mvc框架 与vuex的介绍

    应用级的状态集中放在store中: 改变状态的方式是提交mutations,这是个同步的事物: 异步逻辑应该封装在action中. const vuex_store = new Vuex.store( ...

  5. vuex 的介绍

    vue-cli 中 css 的作用域 scoped vue 数据的为响应数据,一改全改,一变全变的特性,我们的很多处理也会围绕着他 vuex 是处理数据的,是 vue 的数据仓库 vuex 的作用:采 ...

  6. Vuex基本介绍

    1.什么是Vuex Vuex是一个专为vue.js应用程序开发的状态管理模式. 状态管理:data里面的变量都是vue的状态. 2.为什么要用Vuex 当我们构建一个中大型的单页面应用程序时,Vuex ...

  7. 4.VUEX到底是什么

    关于vuex类的新闻最近很多,看到眼热就去查了下资料,然后扯出来一堆flux.redux.state.state之类的概念,以及大型工程必要性之类的.看官方手册也是昏昏然. 然而,我还是弄懂了!我准备 ...

  8. vue2.0项目实战(5)vuex快速入门

    Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化.Vuex 也集成到 Vue 的官方调试工具  ...

  9. vue组件化开发-vuex状态管理库

    Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化.Vuex 也集成到 Vue 的官方调试工具 ...

  10. 超简单入门Vuex小示例

    写在前面 本文旨在通过一个简单的例子,练习vuex的几个常用方法,使初学者以最快的速度跑起来一个vue + vuex的示例. 学习vuex需要你知道vue的一些基础知识和用法.相信点开本文的同学都具备 ...

随机推荐

  1. Opencv中的轮廓(不全)

    1.初识轮廓 为了准确,要使用二值化图像.在寻找轮廓之前,要进行阈值化处理,或者Canny边界检测. 查找轮廓的函数会修改原始图像.如果你在找到轮廓之后还想使用原始图像的话,你应该将原始图像存储到其他 ...

  2. JavaScript学习总结(八)

    这一节结束,我们的JavaScript学习总结系列文章第一阶段就要结束了,今后会适当的补充一些高级的内容,敬请期待. 好了,废话不说进入这一节的学习. 联动框 联动框,实在是太常见了.比如淘宝,我们选 ...

  3. HttpClient4.x 上传文件

    https://blog.csdn.net/wsdtq123/article/details/78888734

  4. 后端Springboot前端VUE实现Excel导入功能

    功能描述:做的是物联网的项目,Excel导入实现的功能是将Excel中的数据批量的导入AEP系统,再导入我们系统中.目前已经完成该功能,前端还会添加进度条优化.对于导入导出功能,推荐这个Git:htt ...

  5. 为什么Web前端变的越来越复杂,变得更加难学了

    前端发展了也有些年头了,曾记得很多年前,聊起前端,都觉得是很简单,那个时候都没有前端工程师这个职位.可现在,前端已经逆袭了,已经不是原来的样子了,各种技术层出不穷,显的越来越高深莫测了.前端真的变得那 ...

  6. Java线程——线程之间的几点重要说明

    在Java中,可以通过配合调用Object对象的wait()方法和notify()方法或notifyAll()方法来实现线程间的通信.在线程中调用wait()方法,将阻塞等待其他线程的通知(其他线程调 ...

  7. 黑马_13 Spring Boot:05.spring boot 整合其他技术

    13 Spring Boot: 01.spring boot 介绍&&02.spring boot 入门 04.spring boot 配置文件 05.spring boot 整合其他 ...

  8. UML-迭代1-基础

    1.原则 1).拆分成多个按时间定量.风险驱动的迭代(细化1.细化2.细化3.细化4) 2).在多个迭代中,对同一用例增量开发. 2.最佳实践 设计人员:对架构的核心和风险做适当设计.实现和测试 研发 ...

  9. js中call和apply的实现原理

    js中call和apply的实现原理            实现call的思路: /* 还有就是call方法是放在Function().prototype上的也就是构造函数才有的call方法 (我门可 ...

  10. uboot对Flash和DDR的分区管理

    1.uboot阶段对Flash的分区 (1).所谓分区,就是对Flash进行分块管理. (2).PC机等产品中,因为大家都是在操作系统下使用硬盘的,整个硬盘由操作系统统一管理,操作系统会使用文件系统帮 ...