购物车功能描述:

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. 使用Auto Layout处理比例间距问题

    使用Auto Layout处理比例间距问题 Auto Layout 是一个掌握起来很具有挑战性的东西.iOS 9引入的 Stack Views和 layout 锚点有一些帮助,但是明白如何创建特定的 ...

  2. KMP算法模式匹配

    转载请注明出处 http://blog.csdn.net/pony_maggie/article/details/37832707 作者:小马 在一个长串中查找一个子串是较经常使用的操作.各种信息检索 ...

  3. mac下执行文件出现Permission Denied的解决

    mac 下终端访问文件出现“Permission Denied”解决方案: 一个文件有3种权限,读.写.可执行,你这个文件没有可执行权限,需要加上可执行权限. 1. 终端下先 cd到该文件的目录下 2 ...

  4. JNI在C和C++中的调用区别

    C-style JNI looks like (*env)->SomeJNICall(env, param1 ...) C++ style JNI looks like env->Some ...

  5. multimap容器和multiset容器中的find操作

    前言 multimap容器是map容器的“ 增强版 ”,它允许一个键对应多个值.对于map容器来说,find函数将会返回第一个键值匹配元素所在处的迭代器.那么对于multimap容器来说,find函数 ...

  6. Android Eclipse 导入 AS Gradle AAR 库手冊

    序言 这是一篇半技术类文章.众所周知如今Google主推Android Studio开发工具.而Eclipse已经被闲置一阵子了,可是Eclipse项目却还有非常多没有迁移到AS中.而如今一些新的库都 ...

  7. 九度OJ 1140:八皇后 (八皇后问题)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:795 解决:494 题目描述: 会下国际象棋的人都很清楚:皇后可以在横.竖.斜线上不限步数地吃掉其他棋子.如何将8个皇后放在棋盘上(有8 * ...

  8. openstack之路:虚拟机的配置

    创建虚拟机有2种方法: 1 virt-manager. 优点:上手简单.缺点:实现自动化比较困难 2 virsh创建 优点:自动化配置简单.缺点:创建过程比较复杂 我们首先通过virt-manager ...

  9. GIN+GORILLA=A GOLANG WEBSOCKET SERVER

    鉴于聊天已然成为大部分app的基础功能,而大部分app用户基数有没有辣么大,常用的聊天server架构如xmpp或者消息队列实现之类的用起来还挺麻烦的,有比较难跟网页端做交互,加之H5标准落地,所以w ...

  10. html body div height: 100%;

    最近做了测试 html{ height: 100%;//全部内容高度,包括滚动出现的内容 background-color:#000;} body{height: 100%;//只一页屏幕,用作滚动的 ...