购物车功能描述:

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. 数据库中表的复杂查询&amp;分页

    一.数据库中表的复杂查询 1)连接查询 1.0连接的基本的语法格式: from TABLE1 join_type TABLE2 [on (join_condition)][where (query_c ...

  2. spring boot Mybatis多数据源配置

    关于 有时候,随着业务的发展,项目关联的数据来源会变得越来越复杂,使用的数据库会比较分散,这个时候就会采用多数据源的方式来获取数据.另外,多数据源也有其他好处,例如分布式数据库的读写分离,集成多种数据 ...

  3. Dynamic Language Runtime (DLR) 初深

    本文主要包括两个内容:DLR在.Net中的位置和一次DLR的调用过程. 1. DLR在. Net 中的位置 图1 DLR 包括哪些内容? 1. Expression Tree(表达式树). 2. Dy ...

  4. spring 监听器简介

    在java web项目中我们通常会有这样的需求:当项目启动时执行一些初始化操作,例如从数据库加载全局配置文件等,通常情况下我们会用javaee规范中的Listener去实现 常用的监听器有spring ...

  5. Red Black Tree 红黑树 AVL trees 2-3 trees 2-3-4 trees B-trees Red-black trees Balanced search tree 平衡搜索树

    小结: 1.红黑树:典型的用途是实现关联数组 2.旋转 当我们在对红黑树进行插入和删除等操作时,对树做了修改,那么可能会违背红黑树的性质.为了保持红黑树的性质,我们可以通过对树进行旋转,即修改树中某些 ...

  6. 编译性语言&amp;解释性语言

    计算机是不能理解高级语言.当然也就不能直接执行高级语言了.计算机仅仅能直接理解机器语言,所以不论什么语言,都必须将其翻译成机器语言.不论什么编程语言编写的程序归根究竟都是由底层机器的机器代码(01序列 ...

  7. java使用ftp局域网内多线程上传图片过慢

    多线程ftp上传文件时候,图片上传很慢,调试和查询资料发现主要在:storeFile方法 解决方案如下: FTPClient fc设置setBufferSize 可以根据内存大小适当设置大点的缓冲区: ...

  8. Anroid事件分发

    因为最近因个人原因离职,面试的时候,有人问到了Android中事件分发机制的过程,因为忘得差不多了,没答好,所以回来后,想写了个Demo,重新复习一遍. 一般来说,Android的组件其实可以分为两类 ...

  9. MATLAB 2013b .m 文件关联

    使用绿色版的MATLAB无法自动关联.m文件,在网上查到的解决办法是,在MATLAB里运行如下命令: cwd=pwd; cd([matlabroot '\toolbox\matlab\winfun\p ...

  10. 在dw中 <!----> 和 /**/ 的区别?

    <!-- -->是HTML的注释标签,使用<和>是符合HTML标签语法规则的./* */是CSS和JS的注释标签.两种注释有各自的使用环境,并且不能相互替代.