好家伙,

继续完善购物车相应功能

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

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

来一波合理分析:

在页面中,有三个商品中

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

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

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

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

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

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

如果值是false

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

反之,如果值是true

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

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

全选为true,

非全选为false

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

在App.vue的组件调用中:

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

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

通过props传值

Footer.vue组件代码如下:

<template>
<div class="footer-container">
<!-- 左侧的全选 -->
<div class="custom-control custom-checkbox">
<!-- 全选框状态与isFull绑定 -->
<input type="checkbox"
class="custom-control-input"
id="cbFull"
:checked="isfull"
@change="fullChange" />
<label class="custom-control-label" for="cbFull">全选</label>
</div> <!-- 中间的合计 -->
<div>
<span>合计:</span>
<span class="total-price">¥{{ 0 }}</span>
</div> <!-- 结算按钮 -->
<button type="button" class="btn btn-primary btn-settle">结算({{ 0 }})</button>
</div>
</template> <script>
export default {
props:{
isfull:{
type:Boolean,
default:true
}
},
methods:{
//监听到全选状态的变化
fullChange(e){
this.$emit('full-change',e.target.checked)
}
}
}
</script> <style lang="less" scoped>
.footer-container {
font-size: 12px;
height: 50px;
width: 100%;
border-top: 1px solid #efefef;
position: fixed;
bottom: 0;
background-color: #fff;
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 10px;
} .custom-checkbox {
display: flex;
align-items: center;
} #cbFull {
margin-right: 5px;
} .btn-settle {
height: 80%;
min-width: 110px;
border-radius: 25px;
font-size: 12px;
} .total-price {
font-weight: bold;
font-size: 14px;
color: red;
}
</style>

来看其中选择框的部分

<input type="checkbox"
class="custom-control-input"
id="cbFull"
:checked="isfull"
@change="fullChange" />

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

接口定义:

props:{
isfull:{
type:Boolean,
default:true
}
},

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

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

再次点击,取消全择

大概的思路分析:

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

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

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

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

上代码,来看看如何实现

Footer.vue组件勾选框:

<input type="checkbox"
class="custom-control-input"
id="cbFull"
:checked="isfull"
@change="fullChange" />

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

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

App.vue的组件调用中:

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

getFullState方法:

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

此处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. JAVA面向对象之封装和调用

    一   面向对象 面向对象的三大特性   1 封装:概念:封装是把过程和数据私有化,打包封存起来,对数据访问只能通过指定的方式.简单的可以理解为你把钱存到银行里,银行专员首先要给你开一个账户,之后你的 ...

  2. 隐私计算FATE-模型训练

    一.说明 本文分享基于 Fate 自带的测试样例,进行 纵向逻辑回归 算法的模型训练,并且通过 FATE Board 可视化查看结果. 本文的内容为基于 <隐私计算FATE-概念与单机部署指南& ...

  3. Xshell缺失mfc110u.dll文件解决方案(有下载链接)

    解决方案 把下面两个文件都下载安装就可以了. 1.vcredist_x86.exe链接: https://pan.baidu.com/s/1njbNHdjqH6x34GQvj4BTBg提取码: pwq ...

  4. UiPath屏幕抓取Screen Scraping的介绍和使用

    一.屏幕抓取(Screen Scraping)的介绍 屏幕抓取使您能够在特定的UI元素或文档(如.PDF文档)中提取数据 二.屏幕抓取(Screen Scraping)在UiPath中的使用 [if ...

  5. 入行数字IC验证后会做些什么?

    半年前,公众号写了第一篇推文<入行数字IC验证的一些建议>,介绍了IC小白可以如何一步一步地摸索入门数字IC验证,同时也在知乎发了这篇入门贴,并且衍生出很多额外基础的内容,收获了不少的浏览 ...

  6. python删除Android应用及文件夹,就说牛不牛吧

    写在前面的一些P话: 碌者劳其心力,懒人使用工具.程序员作为懒人推动社会进步,有目共睹. adb 已提供了开发者可以使用的全部工具,但是重复执行一系列adb命令也令人心烦,所以,如果业务需求固定,直接 ...

  7. 聊聊 Netty 那些事儿之 Reactor 在 Netty 中的实现(创建篇)

    本系列Netty源码解析文章基于 4.1.56.Final版本 在上篇文章<聊聊Netty那些事儿之从内核角度看IO模型>中我们花了大量的篇幅来从内核角度详细讲述了五种IO模型的演进过程以 ...

  8. C++ 模板和泛型编程(掌握Vector等容器的使用)

    1. 泛型 泛型在我的理解里,就是可以泛化到多种基本的数据类型,例如整数.浮点数.字符和布尔类型以及自己定义的结构体.而容器就是提供能够填充任意类型的数据的数据结构.例如vector就很类似于pyth ...

  9. Tapdata 实时数据融合平台解决方案(五):落地

    作者介绍:TJ,唐建法,Tapdata 钛铂数据 CTO,MongoDB中文社区主席,原MongoDB大中华区首席架构师,极客时间MongoDB视频课程讲师. 通过前面几篇文章,我们从企业数据整合与分 ...

  10. Ubuntu安装python各版本

    编译安装的话,之前遇到过很多小问题,感觉还是通过添加这个ppa方式装的比较稳,缺点是可能安装的比较慢,可配合proxychain4 sudo apt install software-properti ...