购物车功能描述:

1. 点击+,-按钮,“已选:xx件”随之增减

2. checkbox选中时,当前项的已选数量增加到头部“已选择xx件”中,未选中时数量不计入

代码:

服务端 node+koa+koa-router

server.js

 const koa = require('koa')
const router = require('koa-router') let server = new koa()
server.listen(8081) server.use(async (ctx, next) => {
ctx.set('Access-Control-Allow-Origin', '*') await next()
}) let r = router() r.get('/list', async ctx => {
ctx.body = [{
name: 'aa',
price: 358,
sales: 8531
},
{
name: 'bb',
price: 18,
sales: 915
},
{
name: 'cc',
price: 857,
sales: 28732
},
{
name: 'dd',
price: 3,
sales: 5
},
{
name: 'ee',
price: 67,
sales: 900
}
]
}) server.use(r.routes())

web端 vue+vuex+fetch

src/components/List.vue

 <template>
<div class="list">
<div>已选择 {{state.count}} 件</div>
<ul>
<ListItem v-for="(item,index) in items" :key="index" :data="item"/>
</ul>
</div>
</template>
<script>
import ListItem from 'components/ListItem'
export default {
name: 'List',
data() {
return {
items: [],
state: this.$store.state
}
},
components: {
ListItem
},
mounted() {
this.getData()
},
methods: {
async getData() {
this.items = await (await fetch('http://localhost:8081/list')).json()
}
}
} </script>

src/components/ListItem.vue

 <template>
<div class="list-item">
<li>
<span style="width: 80px;display: inline-block;"><input type="checkbox" v-model="isChecked">&nbsp;&nbsp;&nbsp;{{data.name}}</span>
<span style="width: 120px;display: inline-block;">¥: &nbsp;{{data.price}}元</span>
<span style="width: 120px;display: inline-block;">销量: &nbsp;{{data.sales}}件</span>
<span style="width: 120px;display: inline-block;">已选: &nbsp;{{currentCount}}件</span>
<button @click="addOne">+</button>&nbsp;&nbsp;&nbsp;&nbsp;
<button @click="minusOne">-</button>
</li>
</div>
</template>
<script>
export default {
name: 'ListItem',
data() {
return {
data: {},
isChecked: false,
currentCount: 1
}
},
created() {
this.data = this.$attrs.data
},
methods: {
addOne() {
this.currentCount++
if (this.isChecked) {
this.$store.dispatch('add', 1)
}
},
minusOne() {
if (this.currentCount <= 0) return
this.currentCount--
if (this.isChecked) {
this.$store.dispatch('minus', 1)
}
}
},
watch: {
isChecked() {
if (this.isChecked) {
this.$store.dispatch('add', this.currentCount)
} else {
this.$store.dispatch('minus', this.currentCount)
}
}
}
} </script>

src/store/index.js

 import Vue from 'vue'
import Vuex from 'vuex' Vue.use(Vuex) export default new Vuex.Store({
strict: true,
state: {
count: 0
},
mutations: {
add(state, arg) {
state.count += arg
},
minus(state, arg) {
if (state.count <= 0) {
return false
}
state.count -= arg
}
},
actions: {
add({ commit }, arg) {
commit('add', arg)
},
minus({ commit }, arg) {
commit('minus', arg)
}
} })

vuex实现购物车功能的更多相关文章

  1. 用vuex实现购物车功能

    效果图 展示目录结构 product组件(纯静态代码) cart组件(纯静态代码) info组件(纯静态代码) 完成以上的三个组件,现在要开始调用这些组件,在App.vue中调用 如果你的姿势正确的话 ...

  2. 基于vue2.0打造移动商城页面实践 vue实现商城购物车功能 基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果

    基于vue2.0打造移动商城页面实践 地址:https://www.jianshu.com/p/2129bc4d40e9 vue实现商城购物车功能 地址:http://www.jb51.net/art ...

  3. Vue+Vant+Vuex实现本地购物车功能

    通常,我们做移动端商城的时候,通常会有购物车模块,那购物车模块有两种实现方式,一是储存在后台通过接口获取到购物车信息,二是存在用户手机本地,第一种方法只要调用接口获取比较简单,这里介绍的是第二种方法, ...

  4. Android 购物车功能的实现

    首先,众所周知,ListView是Android最常用的控件,可以说是最简单的控件,也可以说是最复杂的控件. 作为一个Android初级开发者,可能会简单的ListView展示图文信息. 作为一个有一 ...

  5. 【JSP】Cookie的使用及保存中文,并用Cookie实现购物车功能

    Cookie是服务器存放在客户端的一些数据,比如密码,以及你曾经访问过的一些数据. 设置Cookie //设置cookie Cookie cookie = new Cookie("TOM&q ...

  6. 给destoon商城的列表中和首页添加购物车功能

    如何给destoon商城的列表中和首页添加购物车功能? 目前加入购物车的功能只存在商城的详细页面里,有时候我们需要批量购买的时候,希望在列表页就能够使用这个加入购物车的功能. 修改步骤见下: 例如在商 ...

  7. ASP.NET之电子商务系统开发-2(购物车功能)

    一.前言 继上次的首页数据列表后,这是第二篇.记录一下购物车这个比较庞大的功能,可能实现的方法跟其他人有点不一样,不过原理都差不多,是将cookie存数据库里面的. 二.开始 首先看一下购物车流程及对 ...

  8. jQuery 复制节点的元素实现加入到购物车功能

    描写叙述: 用户点击左边div中的商品,相应商品会自己主动加入到右面的div中,类似电子商城中的加入到购物车功能. 主要用到了jquery中的复制节点功能,基本原理是首先获取点击的元素,然后将对应信息 ...

  9. 微信小程序之购物车功能

    前言 以往的购物车,基本都是通过大量的 DOM 操作来实现.微信小程序其实跟 vue.js 的用法非常像,接下来就看看小程序可以怎样实现购物车功能. 需求 先来弄清楚购物车的需求. 单选.全选和取消, ...

随机推荐

  1. 【ZZ】Visual C++ 6.0 精简安装版(支持VA、ICC 等等安装)

    (2012-04-22 08:10:10) 标签: it 分类: 软件_Software Visual C++ 6.0 精简安装版(支持VA.ICC 等等安装) 2012-04-16 21:07 想找 ...

  2. Oracle 一行拆分为多行

    测试数据: CREATE TABLE t (str VARCHAR2(30)); INSERT INTO t VALUES ( 'X,Y,Z' ); INSERT INTO t VALUES ( 'X ...

  3. 模式匹配之常见匹配算法---SIFT/SURF、haar特征、广义hough变换的特性对比分析

    识别算法概述: SIFT/SURF基于灰度图, 一.首先建立图像金字塔,形成三维的图像空间,通过Hessian矩阵获取每一层的局部极大值,然后进行在极值点周围26个点进行NMS,从而得到粗略的特征点, ...

  4. android好博客

    app集成支付宝.app缓存管理.app列表圆角设计.App自动更新之通知栏下载(有续).索引ListView.App数据格式之解析Json.拖拽ListView http://www.cnblogs ...

  5. Ubuntu上Eclipse安装PyDev方法和配置

    Ubuntu11.10中Eclipse安装PyDev插件方法 PyDev是Eclipse中用来开发python的一个插件,个人比较喜欢,下面介绍在Ubuntu下安装这个插件的方法.(在Windows下 ...

  6. 【网络基础系列二】BOOTP、DHCP协议

    BOOTP 含义:BOOT Protocol,引导协议 作用:引导无盘计算机或者第一次启动的计算机获取以下网络配置信息: 主机的IP地址.子网掩码 路由器(网关)的IP地址 DNS服务器IP地址 C/ ...

  7. Apple 企业开发者账号&邓白氏码申请记录 ----转

    1.账号分类 Apple开发者账号分三种,个人,公司,还有企业.个人和公司都称为标准账号. 还有一种是教育机构的账号. 现在记录先: 申请日期2013年4月26 看申请周期有多长. 账号介绍 个人和公 ...

  8. Codeforces Round #363 (Div. 2) C. Vacations —— DP

    题目链接:http://codeforces.com/contest/699/problem/C 题解: 1.可知每天有三个状态:1.contest ,2.gym,3.rest. 2.所以设dp[i] ...

  9. html5--3.21 课程小结与其他新增元素

    html5--3.21 课程小结与其他新增元素 学习要点 了解新增的input属性pattern 其他几个新增元素(非表单中元素,但是也放在这里讲解) 新增的input属性pattern:设定输入类型 ...

  10. 确定mapkeeper使用的leverdb库路径

    目前libleveldb的a或so库有三个路径,/usr/lib, /usr/lib/x86_64-linux-gnu , /usr/local/lib 使用 ls -d -1 /usr/lib/*  ...