好家伙,

继续完善购物车相应功能

1.如何实现全选和反全选

1.1.全选框的状态显示(父传子)

来一波合理分析:

在页面中,有三个商品中

三个商品中的第二个未选择,

我么使用一个计算属性(fullState)来遍历一遍三个商品的选择状态

遍历过程中发现第二个是false,另外两个为true

那么计算属性fullState的状态也是false了,

三个都是true,这个计算属性才是true

然后将这个值传给全选框的组件,

如果值是false

那么我看到的全选框就是灰色的

反之,如果值是true

那么全选框那个位置就是亮的

我们来添加一个计算属性来动态判断每一项的勾选状态

全选为true,

非全选为false

  1. computed:{
  2. //用于全选状态的计算属性
  3. //动态计算出全选的状态是true还是false
  4. fullState(){
  5. return this.list.every(item=>item.goods_state)
  6. }
  7. },

在App.vue的组件调用中:

  1. <Footer :isfull="fullState"
  2. @full-change="getFullState"></Footer>

随后我们将这个值传给子组件

通过props传值

Footer.vue组件代码如下:

  1. <template>
  2. <div class="footer-container">
  3. <!-- 左侧的全选 -->
  4. <div class="custom-control custom-checkbox">
  5. <!-- 全选框状态与isFull绑定 -->
  6. <input type="checkbox"
  7. class="custom-control-input"
  8. id="cbFull"
  9. :checked="isfull"
  10. @change="fullChange" />
  11. <label class="custom-control-label" for="cbFull">全选</label>
  12. </div>
  13.  
  14. <!-- 中间的合计 -->
  15. <div>
  16. <span>合计:</span>
  17. <span class="total-price">¥{{ 0 }}</span>
  18. </div>
  19.  
  20. <!-- 结算按钮 -->
  21. <button type="button" class="btn btn-primary btn-settle">结算({{ 0 }})</button>
  22. </div>
  23. </template>
  24.  
  25. <script>
  26. export default {
  27. props:{
  28. isfull:{
  29. type:Boolean,
  30. default:true
  31. }
  32. },
  33. methods:{
  34. //监听到全选状态的变化
  35. fullChange(e){
  36. this.$emit('full-change',e.target.checked)
  37. }
  38. }
  39. }
  40. </script>
  41.  
  42. <style lang="less" scoped>
  43. .footer-container {
  44. font-size: 12px;
  45. height: 50px;
  46. width: 100%;
  47. border-top: 1px solid #efefef;
  48. position: fixed;
  49. bottom: 0;
  50. background-color: #fff;
  51. display: flex;
  52. justify-content: space-between;
  53. align-items: center;
  54. padding: 0 10px;
  55. }
  56.  
  57. .custom-checkbox {
  58. display: flex;
  59. align-items: center;
  60. }
  61.  
  62. #cbFull {
  63. margin-right: 5px;
  64. }
  65.  
  66. .btn-settle {
  67. height: 80%;
  68. min-width: 110px;
  69. border-radius: 25px;
  70. font-size: 12px;
  71. }
  72.  
  73. .total-price {
  74. font-weight: bold;
  75. font-size: 14px;
  76. color: red;
  77. }
  78. </style>

来看其中选择框的部分

  1. <input type="checkbox"
  2. class="custom-control-input"
  3. id="cbFull"
  4. :checked="isfull"
  5. @change="fullChange" />

由全选框中的input把这个是否全选的状态渲染出来

接口定义:

  1. props:{
  2. isfull:{
  3. type:Boolean,
  4. default:true
  5. }
  6. },

至此,显示"是否全选"的功能实现了

1.2.点击全选框后,选择全部商品

再次点击,取消全择

大概的思路分析:

我们在子组件中拿到全选框的状态(e.target.checked),

然后,我们用一个自定事件(full-change)把这个状态传给父组件,

随后用一个方法(getFullState)把每一个商品的状态改为全选框的状态

最后Goods.vue组件中渲染出来的状态,自然就是全选框的状态了

上代码,来看看如何实现

Footer.vue组件勾选框:

  1. <input type="checkbox"
  2. class="custom-control-input"
  3. id="cbFull"
  4. :checked="isfull"
  5. @change="fullChange" />

勾选框状态改变,触发方法fullChange,

  1. methods:{
  2. //监听到全选状态的变化
  3. fullChange(e){
  4. this.$emit('full-change',e.target.checked)
  5. }
  6. }

App.vue的组件调用中:

  1. <Footer :isfull="fullState"
  2. @full-change="getFullState"></Footer>

getFullState方法:

  1. getFullState(val){
  2. console.log('在App中拿到了全选的状态')
  3. this.list.forEach(item=>(item.goods_state = val))
  4. }

此处val的值就是前面fullChange传过来的值(e.target.checked)

将所有商品的勾选状态改为全选框的值

于是,这个功能完成了

 

至此,全选功能完成,

第八十二篇:Vue购物车(三) 实现全选功能的更多相关文章

  1. 第三十二篇:vue的响应式原理

    好家伙 什么是响应式?比较官方的回答: Vue.js 的核心包括一套"响应式系统". "响应式",是指当数据改变后,Vue 会通知到使用该数据的代码. 例如,视 ...

  2. 跟我学SpringCloud | 第十二篇:Spring Cloud Gateway初探

    SpringCloud系列教程 | 第十二篇:Spring Cloud Gateway初探 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如 ...

  3. Spring Cloud第十二篇 | 消息总线Bus

    ​ ​本文是Spring Cloud专栏的第十二篇文章,了解前十一篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring ...

  4. 第十二篇 SQL Server代理多服务器管理

    本篇文章是SQL Server代理系列的第十二篇,详细内容请参考原文 在这一系列的上一篇,我们查看了维护计划,一个维护计划可能会创建多个作业,多个计划.你还简单地看了SSIS子系统,并查看了维护计划作 ...

  5. 第十二篇 Integration Services:高级日志记录

    本篇文章是Integration Services系列的第十二篇,详细内容请参考原文. 简介在前一篇文章我们配置了SSIS内置日志记录,演示了简单和高级日志配置,保存并查看日志配置,生成自定义日志消息 ...

  6. Python开发【第二十二篇】:Web框架之Django【进阶】

    Python开发[第二十二篇]:Web框架之Django[进阶]   猛击这里:http://www.cnblogs.com/wupeiqi/articles/5246483.html 博客园 首页 ...

  7. 【译】第十二篇 Integration Services:高级日志记录

    本篇文章是Integration Services系列的第十二篇,详细内容请参考原文. 简介在前一篇文章我们配置了SSIS内置日志记录,演示了简单和高级日志配置,保存并查看日志配置,生成自定义日志消息 ...

  8. 【译】第十二篇 SQL Server代理多服务器管理

    本篇文章是SQL Server代理系列的第十二篇,详细内容请参考原文 在这一系列的上一篇,我们查看了维护计划,一个维护计划可能会创建多个作业,多个计划.你还简单地看了SSIS子系统,并查看了维护计划作 ...

  9. 解剖SQLSERVER 第十二篇 OrcaMDF 行压缩支持(译)

    解剖SQLSERVER 第十二篇   OrcaMDF 行压缩支持(译) http://improve.dk/orcamdf-row-compression-support/ 在这两个月的断断续续的开发 ...

随机推荐

  1. idea中一些常用的快捷键

    ctrl+shift+alt:多行操作psvm:生成main()方法:fori:生成for循环:Ctrl+Alt+v:自动补齐返回值类型ctrl+o:覆写方法ctrl+i:实现接口中的方法ctrl+s ...

  2. JavaScript 语言入门

    目录 JavaScript 介绍 JavaScript 和 和 html 代码的结合方式 第一种方式 第二种方式 4.变量 关系(比较)运算 逻辑运算 数组(重点) 函数(重点) 函数的二种定义方式 ...

  3. supervisor的安装与使用

    Ubuntu安装使用supervisor 进程管理工具 安装 apt-get install supervisor 查看是否安装成功 pgrep supervisord # 返回进程号则成功 改配置文 ...

  4. NC207040 丢手绢

    NC207040 丢手绢 题目 题目描述 "丢丢丢手绢,轻轻地放在小朋友的后面,大家不要告诉她,快点快点抓住她,快点快点抓住她." 牛客幼儿园的小朋友们围成了一个圆圈准备玩丢手绢的 ...

  5. Nacos 的安装与服务的注册

    Nacos 的安装与服务的注册 我们都知道naocs是一个注册中心,那么注册中心是什么呢? 什么是注册中心? 它类似与一个中介角色(不收费的良心中介), 在微服务中起纽带的作用,它提供了服务和服务地址 ...

  6. 递归概念&分类&注意事项和练习_使用递归计算1-n之间的和

    递归:方法自己调用自己 递归的分类: 递归分为两种,直接递归和间接递归 直接递归称为方法自身调用自己 间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法 注意事项: 递归一定要有条件限定 ...

  7. 跟HR在大群吵架是什么体验?

    原创不易,求分享.求一键三连 昨天跟HR负责人在公司大群吵了一架,先说结论:我输了... 事情原委是,老板在周一司庆上聊嗨了,说了一句:我觉得打卡没用,建议取消打卡. 下来后老板在公司论坛发了一个问题 ...

  8. C# MVCapi跨域问题

     he 'Access-Control-Allow-Origin' header contains multiple values ', *', but only one is allowed. Or ...

  9. 4-8 CS后台项目练习-2

    8. 类别管理--添加类别--持久层 8.1. 配置 续前日,无新增 8.2. 规划需要执行的SQL语句 续前日,无新增 8.3. 接口与抽象方法 此前需要执行的SQL语句大致是: select id ...

  10. 什么是FastAPI异步框架?(全面了解)

    一:FastAPI框架 1.FastAPI是应该用于构建API的现代,快速(高性能)的 web 框架,使用Python 3.6+ 并基于标准的 Python 类型提示. 关键性: 快速: 可与Node ...