当前位置: 首页 > news >正文

购物车案例(源码分享)

  💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。



非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨
 


购物车效果图

需求说明:

  1. 渲染功能

  2. 删除功能

  3. 修改个数

  4. 全选反选

  5. 统计 选中的 总价 和 总数量

实现思路:

1.基本渲染: v-for遍历、:class动态绑定样式

2.删除功能 : v-on 绑定事件,获取当前行的id

根据id找到数组中对应项 ->find   然后在修改数目

Array.prototype.find()

find() 方法返回数组中满足提供的测试函数的第一个元素的值。否则返回 undefined。

4.全选反选

  1. 必须所有的小选框都选中,全选按钮才选中 → every

  2. 如果全选按钮选中,则所有小选框都选中

  3. 如果全选取消,则所有小选框都取消选中

声明计算属性,判断数组中的每一个checked属性的值,看是否需要全部选

Array.prototype.every()

every() 方法测试一个数组内的所有元素是否都能通过指定函数的测试。它返回一个布尔值。

Array.prototype.forEach()

forEach() 方法对数组的每个元素执行一次给定的函数。

5.统计 选中的 总价 和 总数量 :通过计算属性来计算选中的总价和总数量

源码分享(需要自取)

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><link rel="stylesheet" href="./css/inputnumber.css" /><link rel="stylesheet" href="./css/index.css" /><title>购物车</title>
</head><body><div class="app-container" id="app"><!-- 顶部banner --><div class="banner-box"><img src="./img/fruit.jpg" alt="" /></div><!-- 面包屑 --><div class="breadcrumb"><span>🏠</span>/<span>购物车</span></div><!-- 购物车主体 --><div class="main" v-if="fruitList.length > 0 "><div class="table"><!-- 头部 --><div class="thead"><div class="tr"><div class="th">选中</div><div class="th th-pic">图片</div><div class="th">单价</div><div class="th num-th">个数</div><div class="th">小计</div><div class="th">操作</div></div></div><!-- 身体 --><div class="tbody"><div v-for="(item,index) in fruitList" :key="item.id" class="tr" :class="{active: item.isChecked}"><div class="td"><input type="checkbox" v-model="item.isChecked" /></div><div class="td"><img :src="item.icon" alt="" /></div><div class="td">{{ item.price }}</div><div class="td"><div class="my-input-number"><button :disabled="item.num <= 1" class="decrease" @click="sub(item.id)"> - </button><span class="my-input__inner">{{ item.num }}</span><button class="increase" @click="add(item.id)"> + </button></div></div><div class="td">{{ item.num * item.price}}</div><div class="td"><button @click="del(item.id)">删除</button></div></div><!-- 底部 --><div class="bottom"><!-- 全选 --><label class="check-all"><input type="checkbox" v-model="isAll" />全选</label><div class="right-box"><!-- 所有商品总价 --><span class="price-box">总价&nbsp;&nbsp;:&nbsp;&nbsp;¥&nbsp;<span class="price">{{ totalPrice}}</span></span><!-- 结算按钮 --><button class="pay">结算({{ totalCount }})</button></div></div></div><!-- 空车 --><div class="empty" v-else>🛒空空如也</div></div><script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script><script>const app = new Vue({el: '#app',data: {// 水果列表fruitList: [{id: 1,icon: './img/火龙果.png',isChecked: true,num: 2,price: 6,},{id: 2,icon: './img/荔枝.png',isChecked: false,num: 7,price: 20,},{id: 3,icon: './img/榴莲.png',isChecked: false,num: 3,price: 40,},{id: 4,icon: './img/鸭梨.png',isChecked: true,num: 10,price: 3,},{id: 5,icon: './img/樱桃.png',isChecked: false,num: 20,price: 34,},],},computed: {//默认计算属性: 只能获取不能设置 要设置需要写完整写法isAll: {get() {return this.fruitList.every(item => item.isChecked)},set(value) {//基于拿到的布尔值 要让所有的小选框 同步状态this.fruitList.forEach(item => item.isChecked = value)}},totalCount() {return this.fruitList.reduce((sum, item) => {if (item.isChecked) {return sum + item.num} else {return sum}}, 0)},totalPrice() {return this.fruitList.reduce((sum, item) => {if (item.isChecked) {return sum + item.num * item.price} else {return sum}}, 0)}},methods: {del(id) {this.fruitList = this.fruitList.filter(item => item.id != id)},add(id) {const fruit = this.fruitList.find(item => item.id === id)fruit.num++},sub(id) {const fruit = this.fruitList.find(item => item.id === id)fruit.num--}},})</script>
</body></html>

❤️❤️❤️小郑是普通学生水平,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C语言 指针方法 编一程序,输入月份号,输出该月的英文月名
  • js动态规划
  • 【HarmonyOS】HarmonyOS NEXT学习日记:三、初识ArkUI
  • 智慧新零售移动端收银视频介绍
  • 204、【动态规划】牛客网 ——DP3 跳台阶扩展问题(Python版本)
  • Java后端开发(十五)-- Ubuntu 开启activemq开机自启动功能
  • 如何解决Windows系统目录权限问题
  • Python中Selenium 和 keyboard 库的使用
  • Transformer-Bert---散装知识点---mlm,nsp
  • 你有多自律就有多自由
  • Perl语言入门学习指南
  • 跟代码执行流程,读Megatron源码(二)训练入口pretrain_gpt.py
  • Sql Server缓冲池、连接池等基本知识(附Demo)
  • Docker 基本管理
  • 【漏洞复现】泛微E-Cology WorkflowServiceXml SQL注入漏洞
  • C语言笔记(第一章:C语言编程)
  • extjs4学习之配置
  • LeetCode算法系列_0891_子序列宽度之和
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • SpringBoot几种定时任务的实现方式
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • Zepto.js源码学习之二
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 缓存与缓冲
  • 简析gRPC client 连接管理
  • 聊聊redis的数据结构的应用
  • 码农张的Bug人生 - 见面之礼
  • 排序算法学习笔记
  • 实习面试笔记
  • 详解移动APP与web APP的区别
  • 译米田引理
  • 译有关态射的一切
  • # C++之functional库用法整理
  • #git 撤消对文件的更改
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • ()、[]、{}、(())、[[]]命令替换
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (六)激光线扫描-三维重建
  • (算法设计与分析)第一章算法概述-习题
  • (一)Java算法:二分查找
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .gitignore文件—git忽略文件
  • .NET Core 中插件式开发实现
  • .NET delegate 委托 、 Event 事件
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .Net Web项目创建比较不错的参考文章
  • .Net 路由处理厉害了
  • .NET编程C#线程之旅:十种开启线程的方式以及各自使用场景和优缺点
  • @AliasFor 使用
  • @Autowired 与@Resource的区别
  • @拔赤:Web前端开发十日谈