购物车功能描述:

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. linux 块设备驱动(五)——块设备应用层的操作

    一: 加载好sbull驱动 root@CarRadio:/# ls /dev/sbull -l brw-r--r-- 1 root root 254, 16 Mar 25 08:25 /dev/sbu ...

  2. CSS伪类:before 和 :after

    CSS用了许久,对一些伪类熟视无睹,从不想着去搞清楚一下.比如说这个 :before :after 其实,:before 表示该标记前面的样式,反之 :after 代表设置后面的样式.网页上常常看到有 ...

  3. Nothing but the key 属性全部依赖于主键 third norm form

    全依赖 Designs that Violate 1NF CustomerCustomer ID First Name Surname Telephone Number123 Pooja Singh ...

  4. 5 Maven生命周期和插件

        命令行的输入往往就对应了声明周期,Maven的生命周期是抽象的,其实际行为都是由插件来完成.生命周期和插件两者协同工作,密不可分. 一.何为声明周期     Maven的生命周期就是为了对多有 ...

  5. js 链接传入中文参数乱码解决

    传入时,可能出现中文的参数用encodeURI进行两次转码,如: lethref="http://www.zzdblog.cn?keyword='+encodeURI(encodeURI(k ...

  6. -webkit-mask-box-image给框架加个同样大小的遮罩

    很棒的css属性,可以在div上方建个同大小的遮罩,配合线性变化gradient可以实现很酷的样式,比如:时间选择的UI组件,里面有个模糊的上方遮罩 手册地址:https://developer.mo ...

  7. input表单元素的默认padding不一致问题

    最近做的项目,发现一堆问题,input type=“text”和type=“button” (1)在无文字的时候高度是一致的,分别写入相同大小的文字type=“button”高度>type=“t ...

  8. POJ1061 青蛙的约会 —— 扩展gcd

    题目链接:https://vjudge.net/problem/POJ-1061 青蛙的约会 Time Limit: 1000MS   Memory Limit: 10000K Total Submi ...

  9. codeforces 463A Caisa and Sugar 解题报告

    题目链接:http://codeforces.com/problemset/problem/463/A 题目意思:某个人有 s dollar的钱,有 n 种类型的糖果,第 i 种糖果的价值为 xi d ...

  10. nginx + ffmpeg

    第一种方案:ffmpeg+nginx 新的ffmpeg已经支持HLS.(本人也参与了代码供献,给自己做个广告:)) 点播: 生成hls分片: ffmpeg -i <媒体文件> -c:v l ...