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 ...
随机推荐
- shell linux基本命令实例、笔记
1. 在当前文件夹下.查找20分钟内,被訪问过的文件, 并将文件的详情显示出来: find ./ -name '*.log' -mmin -20 -exec ls -l {} \; 当然,须要指出 ...
- SQLServer2005 没有日志文件(*.ldf) 只有数据文件(*.mdf) 恢复数据库的方法
代码如下: exec sp_attach_db exun,'d:\exun2.mdf' (可能执行一次不能成功,测试了下,有时候需要执行2次以上命令才行) 执行了之后,记得刷新数据库,不然是不会显示的
- 一文读懂JVM
(一)JVM 基础知识 1)Java 是如何实现跨平台的? 注意:跨平台的是 Java 程序,而不是 JVM.JVM 是用 C/C++ 开发的,是编译后的机器码,不能跨平台,不同平台下需要安装不同版本 ...
- IntelliJ IDEA 添加项目后编译显示包不存在的解决方案
File -> Project Structure -> Modules 看看是否有多个项目,删掉无用的.或者调整一下项目,重新 Mark as 一下,指定成 Sources
- Leetcode796.Rotate String旋转字符串
给定两个字符串, A 和 B. A 的旋转操作就是将 A 最左边的字符移动到最右边. 例如, 若 A = 'abcde',在移动一次之后结果就是'bcdea' .如果在若干次旋转操作之后,A 能变成B ...
- 在MaxCompute中配置Policy策略遇到结果不一致的问题
背景信息: 本文以如下场景为基准进行编写,如下: 用户通过DataWorks-简单模式使用MaxCompute: 用户具有DataWorks默认角色,如DataWorks开发者角色: 用户通过cons ...
- Add Binary字符数字相加,字符串合成
Given two binary strings, return their sum (also a binary string). For example,a = "11"b = ...
- I/O模型: 阻塞、非阻塞、I/O复用、同步、异步
I/O模型不论在实际使用还是准备笔试面试中都是重要的内容,参考Unix网络编程进行总结如下.(尤其注意红色标注处) 1. 明确I/O考察的对象和流程 参考Unix网络编程,一个输入操作通常包括两个不同 ...
- datetimepicker —— 日期选择控件
一.依赖 <link rel="stylesheet" href="css/bootstrap.min.css"> <link rel=&qu ...
- 3DSMAX安装失败怎样卸载重新安装3DSMAX,解决3DSMAX安装失败的方法总结
技术帖:3DSMAX没有按照正确方式卸载,导致3DSMAX安装失败.楼主也查过网上关于如何解决3DSMAX安装失败的一些文章,是说删除几个3DSMAX文件和3DSMAX软件注册表就可以解决3DSMAX ...