vue实现购物车逻辑
<!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<title>index</title>
<style>
table {
border: 1px solid #e9e9e9;
border-collapse: collapse;
border-spacing: 0;
} th,
td {
padding: 8px 16px;
border: 1px solid #e9e9e9;
text-align: left;
} th {
background-color: #f7f7f7;
color: #5c6b77;
font-weight: 600;
}
</style>
</head> <body> <div id="app">
<!-- 如果list有内容,渲染购物车内容 -->
<div v-if="list.length">
<table>
<thead>
<tr>
<!-- id -->
<th></th>
<th>书籍名称</th>
<th>出版日期</th>
<th>价格</th>
<th>购买数量</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<!-- 给tr写入list的循环 -->
<!-- 不建议直接遍历整个对象,而是用item.name之类的方式写入数据,方便加入+-的按钮等操作 -->
<!-- 获取index是很重要der -->
<tr v-for="(item, index) in list" :key="item.id">
<!-- index每次循环+1 -->
<td>{{index + 1}}</td>
<td>{{item.name}}</td>
<td>{{item.date}}</td>
<!-- 价格建议保留两位小数,数据有.00 但渲染的时候被省略掉了 -->
<td>{{item.price|showPrice}}</td>
<!-- 可以直接让显示的内容保留两位小数点
由于总价有同样的需求,可以封装函数
-->
<!-- <td>{{'¥' + item.price.toFixed(2)}}</td> --> <td>
<!-- 如果count小于等于0 就禁用button -->
<!-- 给加减的button分别注册点击加减数字的事件 -->
<button :disabled="item.count<=0" @click="increment(index)">-</button>
<span>{{item.count}}</span>
<button @click="decrement(index)">+</button>
</td>
<td>
<!-- 点击移除事件 -->
<button @click="removeItem(index)">移除</button>
</td>
</tr>
</tbody>
</table>
<!-- 计算并渲染总价(保留两位小数点并拼接¥符号) -->
<h2>总价格: {{totalPrice | showPrice}}</h2>
</div>
<!-- 如果购物车莫得东西,显示这个 -->
<div v-else>购物车没有书籍!</div>
</div>
<script src="https://cdn.bootcss.com/vue/2.6.9/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
// books 的list
list: [{
id: 1,
name: '《算法导论》',
date: '2006-9',
price: 85.00,
count: 1
},
{
id: 2,
name: '《UNIX编程艺术》',
date: '2006-2',
price: 59.00,
count: 1
},
{
id: 3,
name: '《编程珠玑》',
date: '2008-10',
price: 39.00,
count: 1
},
{
id: 4,
name: '《代码大全》',
date: '2006-3',
price: 128.00,
count: 1
},
]
},
computed: {
// 计算总价
totalPrice() {
// 箭头函数
return this.list.reduce((preValue, item) => {
// 单价乘数量
// preValue是之前已经添加的价格 item是(回调中的array)是list中每一项
// reduce(callback,innitialValue)
// callback对数组中的所有元素调用指定的回调函数。 返回值为累积结果,并且此返回值在下一次调用该回调函数时作为参数提供。
// callback 如果提供了 initialValue, 则 reduce 会对数组中的每个元素调用一次 callback.如果未提供 initialValue,则 reduce方法会对从第二个元素开始的每个元素调用 callbackfn 函数。
// 回调函数语法 function callbackfn(previousValue, currentValue, currentIndex, array1)
return preValue + item.price * item.count
// 0是初始值
}, 0)
}
},
filters: {
// 过滤器 这个东西放在methods里不如放在过滤器里
// 过滤器不改变真正的data,而只是改变渲染的结果,并返回过滤后数据
showPrice(price) {
return '¥' + price.toFixed(2)
}
},
methods: {
// 增加和减少让count++ -- ,然后vue会自动把变化的数据渲染到页面
//根据index判断要改的哪一行的count
increment(index) {
this.list[index].count--
// console.log(index);
},
decrement(index) {
this.list[index].count++
},
// 点击移除时,获取当前行index splice(要移除的位置,移除的列数),移除当前list行
removeItem(index) {
this.list.splice(index, 1)
}
},
})
</script>
</body> </html>
注释写的挺全的,所以就不做过多说明了~~
博客地址 :https://www.cnblogs.com/sandraryan/
vue实现购物车逻辑的更多相关文章
- 使用vue模拟购物车小球动画
使用vue模拟购物车小球动画 1.效果演示 2.相关代码 <!DOCTYPE html> <html lang="en"> <head> < ...
- 如何以python风格高逼格的改成购物车逻辑
之前有一篇博文写到关于购物车的业务逻辑,分别运用cookie和redis存储未登录和登录用户的购物车数据,虽然已经很好的完成了业务逻辑,但是会发现代码的冗余很严重,也不够具有python特色,今天就让 ...
- Vue实战-购物车案例
Vue实战-购物车案例 普通购物车 实现的功能:添加商品到购物车,计算总价 <!DOCTYPE html> <html lang="en"> <hea ...
- vue实战记录(五)- vue实现购物车功能之商品总金额计算和单选全选删除功能
vue实战,一步步实现vue购物车功能的过程记录,课程与素材来自慕课网,自己搭建了express本地服务器来请求数据 作者:狐狸家的鱼 本文链接:vue实战-实现购物车功能(五) GitHub:sue ...
- vue实战记录(六)- vue实现购物车功能之地址列表选配
vue实战,一步步实现vue购物车功能的过程记录,课程与素材来自慕课网,自己搭建了express本地服务器来请求数据 作者:狐狸家的鱼 本文链接:vue实战-实现购物车功能(六) GitHub:sue ...
- vue实战记录(四)- vue实现购物车功能之过滤器的使用
vue实战,一步步实现vue购物车功能的过程记录,课程与素材来自慕课网,自己搭建了express本地服务器来请求数据 作者:狐狸家的鱼 本文链接:vue实战-实现购物车功能(四) GitHub:sue ...
- vue实战记录(三)- vue实现购物车功能之渲染商品列表
vue实战,一步步实现vue购物车功能的过程记录,课程与素材来自慕课网,自己搭建了express本地服务器来请求数据 作者:狐狸家的鱼 本文链接:vue实战-实现购物车功能(三) GitHub:sue ...
- vue实战记录(二)- vue实现购物车功能之创建vue实例
vue实战,一步步实现vue购物车功能的过程记录,课程与素材来自慕课网,自己搭建了express本地服务器来请求数据 作者:狐狸家的鱼 本文链接:vue实战-实现购物车功能(二) GitHub:sue ...
- vue实战记录(一)- vue实现购物车功能之前提准备
vue实战,一步步实现vue购物车功能的过程记录,课程与素材来自慕课网,自己搭建了express本地服务器来请求数据 作者:狐狸家的鱼 本文链接:vue实战-实现购物车功能(一) GitHub:sue ...
随机推荐
- 2019-4-16-C#-在-8.0-对比-string-和-string_-的类型
title author date CreateTime categories C# 在 8.0 对比 string 和 string? 的类型 lindexi 2019-04-16 10:16:56 ...
- 洛谷P1263 宫廷守卫
P1263 宫廷守卫 题目描述 从前有一个王国,这个王国的城堡是一个矩形,被分为M×N个方格.一些方格是墙,而另一些是空地.这个王国的国王在城堡里设了一些陷阱,每个陷阱占据一块空地. 一天,国王决定在 ...
- 【CodeVS】【2004年NOIP全国联赛提高组】1057 津津的储蓄计划
1057 津津的储蓄计划 2004年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 青铜 Bronze 题目描述 Description 津津的零花钱一直都是 ...
- LUOGU P1081 开车旅行 (noip 2012)
传送门 解题思路 这道题刚了一下午,主要就刚在set那里了.先写了一个暴力70分..之后优化预处理,看着大佬神犇们都用的什么双向链表之类的东西,本蒟蒻不会,又懒得手写平衡树,就拿了个set搞了搞,感觉 ...
- web前端学习(二)html学习笔记部分(7)--web存储2
1.2.20 web存储 1.2.20.1 Web存储-客户端存储数据新方法 1.两种方式 1)localStorage - 没有时间限制的数据存储 2)针对一个sessionStorage - ...
- 从0开始学习 GitHub 系列之「06.团队合作利器 Branch」
Git 相比于 SVN 最强大的一个地方就在于「分支」,Git 的分支操作简直不要太方便,而实际项目开发中团队合作最依赖的莫过于分支了,关于分支前面的系列也提到过,但是本篇会详细讲述什么是分支.分支的 ...
- 产生冠军 HDU - 2094 (拓扑排序)
分析: 当有且只有一个节点入度为0时,该节点即为冠军,否则不能产生冠军.所以以下代码中只要入度大于0的无论是几都将其设置为1. #include <stdio.h> #include &l ...
- RestFul 与 RPC
原文地址:https://blog.csdn.net/u014590757/article/details/80233901 RPC.REST API深入理解 一:RPC RPC 即远程过程调用(Re ...
- JPA 将驼峰列名自动转换为_
数据库中和代码中都没有'cat_age'列名:但是用jpa保存的时候,总是提示此错误:这个问题纠结半天,后来在朋友的指点下,找到问题所在: spring data jpa 使用默认策略是Improv ...
- SVN经常使用操作
版权声明:本文为博主原创文章.转载请注明出处. https://blog.csdn.net/Jerome_s/article/details/27950055 Subversion(简称svn)安装 ...