购物车功能描述:

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. 【原创】Sublime Text 3快捷配置c++的编译,运行,gdb环境

    打开Tools ->Build System -> New Build System 弹出一个文件,将原有的东西删掉,输入: { "encoding": "u ...

  2. 对于iPhone描述文件的签名认证

    1.购买SSL证书验证(跟https认证一样) 2.iphone 签名.mobileconfig文件 company.mobileconfig 未签名的mobileconfig文件 server.cr ...

  3. socket 学习笔记

    #include <sys/socket.h> ---------------------------------------------------------------------- ...

  4. Linux-VMware三种网络模式

    虚拟机网络模式 对于VMware虚拟软件来说,有三种网络模式 1.桥接 2.NAT 3.Host-only 桥接 桥接网络是指本地物理网卡和虚拟网卡通过VMnet0虚拟交换机进行桥接,因此物理网卡和虚 ...

  5. Oracle序列更新

    Oracle 数据库的时候,有时候会选择使用自增序列作为主键.但是在开发过程中往往会遇到一些不规范的操作,导致表的主键值不是使用序列插入的.这样在数据移植的时候就会出现各种各样的问题.当然数据库主键不 ...

  6. dij+堆优化

    写这个dij+堆优化的原因是有些地方卡SPFA,只能搞这个: 香甜的奶油: #include<iostream> #include<cstdio> #include<cs ...

  7. POJ2478 Farey Sequence —— 欧拉函数

    题目链接:https://vjudge.net/problem/POJ-2478 Farey Sequence Time Limit: 1000MS   Memory Limit: 65536K To ...

  8. centos6.5 mysql 5.6修改root密码,以及创建用户并授权

    mkdir -p mysql_home/{data,temp,undologs,logs} chown -R mysql:mysql /dbfiles/mysql_home mysql_install ...

  9. html5--3.5 input元素(4)

    html5--3.5 input元素(4) 学习要点 input元素及其属性 input元素 用来设置表单中的内容项,比如输入内容的文本框,按钮等 不仅可以布置在表单中,也可以在表单之外的元素使用 i ...

  10. TensorFlow 图像预处理(一) 图像编解码,图像尺寸调整

    from: https://blog.csdn.net/chaipp0607/article/details/73029923 TensorFlow提供了几类图像处理函数,下面介绍图像的编码与解码,图 ...