Vue中TodoLists案例_底部统计

news2024/11/19 3:32:43

与上一篇Vue中TodoList案例_删除有俩个文件变化了

App.vue:向儿子组件MyFooter传递参数todos

<template>
  <div id="root">
    <div class="todo-container">
      <div class="todo-wrap">
        <MyHeader :addTodo="addTodo"/>
        <MyList :todos="todos" :checkTodo="checkTodo" :deleteTodo="deleteTodo"/>
        <MyFooter :todos="todos"/>
      </div>
    </div>
  </div>

</template>

<script>
import MyHeader from './components/MyHeader'
import MyList from './components/MyList'
import MyFooter from './components/MyFooter'

export default {
  name:'App',
  components:{MyHeader,MyList,MyFooter},
  data(){
    return{
      todos:[
        {id:'001',title:'唱',done:true},
        {id:'002',title:'跳',done:false},
        {id:'003',title:'rap',done:true},
        {id:'004',title:'篮球',done:true}
      ]
    }
  },
  methods:{
    //添加一个todo
      addTodo(todoObj){
        this.todos.unshift(todoObj)
    },
    //勾选or取消勾选一个todo
    checkTodo(id){
        this.todos.forEach((todo)=>{
          if (todo.id===id)todo.done=!todo.done
        })
    },
    //删除一个todo
    deleteTodo(id){
        this.todos = this.todos.filter((todo)=>{
            return todo.id !==id
        })
    }
  }
}
</script>

<style>
/*base*/
body {
  background: #fff;
}

.btn {
  display: inline-block;
  padding: 4px 12px;
  margin-bottom: 0;
  font-size: 14px;
  line-height: 20px;
  text-align: center;
  vertical-align: middle;
  cursor: pointer;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
  border-radius: 4px;
}

.btn-danger {
  color: #fff;
  background-color: #da4f49;
  border: 1px solid #bd362f;
}

.btn-danger:hover {
  color: #fff;
  background-color: #bd362f;
}

.btn:focus {
  outline: none;
}

.todo-container {
  width: 600px;
  margin: 0 auto;
}
.todo-container .todo-wrap {
  padding: 10px;
  border: 1px solid #ddd;
  border-radius: 5px;
}
</style>

MyFooter.vue:用props接收todos参数,全部{{todo.lengh}}获取长度,已完成利用reduce函数统计完成个数(原理,pre初始值0,循环加todo.done满足条件+1)

<template>
  <div class="todo-footer">
    <label>
      <input type="checkbox"/>
    </label>
    <span>
           <span>已完成{{doneTotal}}</span> / 全部{{todos.length}}
       </span>
    <button class="btn btn-danger">清除已完成的任务</button>
  </div>
</template>

<script>
export default {
  name: "MyFooter",
  props:[
      'todos'
  ],
  computed:{
    doneTotal(){
     /* const x = this.todos.reduce((pre,current)=>{
          console.log('@',pre,current)
          return pre+(current.done?1:0)
      },0)*/
      return  this.todos.reduce((pre,todo)=>pre+(todo.done?1:0),0)
    }
  }
}
</script>

<style scoped>
/* Footer */
.todo-footer {
  height: 40px;
  line-height: 40px;
  padding-left: 6px;
  margin-top: 5px;
}
.todo-footer label{
  display: inline-block;
  margin-right: 20px;
  cursor: pointer;
}
.todo-footer label input{
  position: relative;
  top: 1px;
  vertical-align: middle;
  margin-right: 5px;
}

.todo-footer button{
  float: right;
  margin-top: 5px;
}
</style>

效果:底部已完成/全部

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/799570.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

每天一道C语言编程(递归:斐波那契数,母牛的故事)

递归的条件 递归函数必须有一个可直接退出的条件&#xff0c;否则会进入无限递归&#xff0c;例如 #include<stdio.h> void f(int n) {if(n<0)return;f(n-1);printf("%d ",n); }int main() {int n5;f(n);return 0;}//递归的出口 if(n<0) retur…

【docker】docker部署nginx

目录 一、步骤二、示例 一、步骤 1.搜索nginx镜像 2.拉取nginx镜像 3.创建容器 4.测试nginx 二、示例 1.搜索nginx镜像 docker search nginx2.拉取nginx镜像 docker pull nginx3.创建容器&#xff0c;设置端口映射、目录映射 # 在root目录下创建nginx目录用于存储nginx数据…

花色更潮的夜光飞盘,手感也很出色

飞盘运动因为易于入门&#xff0c;方便操作&#xff0c;一直以来都备受大家的喜爱&#xff0c;而近几年更是成为了一项非常流行的户外运动。每天玩上一局飞盘&#xff0c;不仅可以锻炼身体&#xff0c;还能够增强团队合作意识&#xff0c;让大家在运动中尽情享受乐趣。 这两天我…

【树上点对问题】Tree Problem

Problem - D - Codeforces 题意&#xff1a; 思路&#xff1a; 一个很裸的树形DP 对于树上的一对点&#xff0c;我们往往考虑更换枚举对象 如果关注的是路径经过边&#xff0c;那么就考虑一条边两端的连通分量 如果关注的是路径经过点&#xff0c;那么分成两部分考虑 一部…

郑州如何为SSL证书续期

SSL数字证书的主要作用就是保护网站传输数据安全&#xff0c;而我们要知道SSL证书是有时间限制&#xff0c;到期之后就会失效&#xff0c;对网站传输数据的加密保护也会失效&#xff0c;这就需要我们在失效前为SSL证书续期。那么我们该如何为SSL证书续期呢&#xff1f;今天随SS…

uniapp实现带参数二维码

view <view class"canvas"><!-- 二维码插件 width height设置宽高 --><canvas canvas-id"qrcode" :style"{width: ${qrcodeSize}px, height: ${qrcodeSize}px}" /></view> script import uQRCode from /utils/uqrcod…

断路器分合闸速断试验

试验目的 高压断路器的分、 合闸速度是断路器的重要特性参数, 反映出断路器的操动机构 与传动机构在分、 合闸过程中的运动特征。 断路器分、 合闸速度超出或者低于规定值 均会影响断路器的运行状态和使用寿命。 断路器合闸速度不足, 将会引起触头合闸振 颤, 预击穿时间过长。…

互联网医院小程序源码|互联网+智慧医院解决方案

随着互联网技术的迅猛发展&#xff0c;互联网医院系统开发逐渐受到人们的关注和需求。互联网医院系统是将传统医院服务与互联网技术相结合的创新模式&#xff0c;通过互联网平台为患者提供在线诊疗、预约挂号、药品配送等医疗服务。下面就来介绍一下互联网医院系统开发的优势。…

【宝藏系列】20个常用的Python技巧

【宝藏系列】20个常用的Python技巧 文章目录 【宝藏系列】20个常用的Python技巧&#x1f349;文末推荐【Python之光】 Python的可读性和简单性是其广受欢迎的两大原因&#xff0c;本文介绍20个常用的Python技巧来提高代码的可读性&#xff0c;并能帮助你节省大量时间&#xff0…

Python实现指定区域桌面变化监控并报警

在这篇博客中&#xff0c;我们将使用Python编程语言和一些常用的库来实现一个简单的区域监控和变化报警系统。我们将使用Tkinter库创建一个图形界面&#xff0c;允许用户选择监控区域&#xff0c;并使用OpenCV库进行图像处理和相似性比较&#xff0c;以检测区域内的变化&#x…

MySQL基础扎实——MySQL数据库中的MySAM和InnDB的区别

MySAM和InnoDB是MySQL数据库中两种常见的存储引擎。 MySAM&#xff08;MyISAM&#xff09;是MySQL早期版本中默认的存储引擎&#xff0c;它采用表级锁定的机制&#xff0c;适用于读操作较多、写操作较少的场景。下面是MySAM和InnoDB的区别&#xff1a; 事务支持&#xff1a;My…

【树上乘法原理】ICPC Shanghai 2021 G, Edge Groups

http://oj.daimayuan.top/course/8/problem/400 题意&#xff1a; 思路&#xff1a; 求方案数&#xff0c;考虑组合数学 手摸一下样例发现&#xff0c;对于一棵子树&#xff0c;若边数为偶数&#xff0c;那么可以内部匹配&#xff0c;但是如果边数为奇数&#xff0c;那么就一…

使用SpringBoot替代Nginx发布Vue3项目

目录 一、新建一个SpringBoot项目 二、将Vue项目打包 三、打包文件放到SpringBoot中 四、配置反向代理 五、启动项目 六、集成案例 一、新建一个SpringBoot项目 &#xff08;博主SpringBoot版本2.7.14&#xff09; <dependency><groupId>org.springframewor…

深度学习算法的计算量

文章目录 一、FLOPs与FLOPS二、参数量parameters三、Latency与FPS四、结论 一、FLOPs与FLOPS 二、参数量parameters 三、Latency与FPS 四、结论

运算放大器(二):恒流源

一、实现原理 恒流源的输出电流能够在一定范围内保持稳定&#xff0c;不会随负载的变化而变化。 通过运放&#xff0c;将输入的电压信号转换成满足一定关系的电流信号&#xff0c;转换后的电流相当一个输出可调的简易恒流源。 二、电路结构 常用的恒流源电路如下…

16位S912ZVML32F3MKH、S912ZVML31F1WKF、S912ZVML31F1MKH混合信号MCU,适用于汽车和工业电机控制应用。

S12 MagniV微控制器是易于使用且高度集成的混合信号MCU&#xff0c;非常适合用于汽车和工业应用。S12 MagniV MCU提供单芯片解决方案&#xff0c;是基于成熟的S12技术的完整系统级封装 (SiP) 解决方案&#xff0c;在整个产品组合内软件和工具都兼容。 S12 MagniV系统级封装 (S…

Hibernate Validator-校验注解使用归纳

文章目录 前言java-校验注解使用归纳1. 概述2. 引入依赖3. 手动抓取校验错误信息示例4. 自定义校验注解编写示例5. 统一配置校验错误信息示例 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。  …

安装支持vs2019的MFC(解决MSBuild 错误 MSB8041、MSB8042)

安装支持MFC的vs2019&#xff08;解决MSBuild 错误 MSB8041、MSB8042&#xff09; 常用安装选项解决MSBuild 错误 常用安装选项 解决MSBuild 错误 安装上述勾选内容后&#xff0c;即可解决MSBuild 错误 MSB8041 MSB8041&#xff1a;此项目需要 MFC/ATL 库。 https://learn.mic…

java读取资源路径的几种方式

Testpublic void path() throws IOException {System.out.println("用户当前工作目录"System.getProperty("user.dir"));File directory new File("");String path2 directory.getCanonicalPath();System.out.println("当前工作目录1:&qu…

0137 内存管理1

目录 3.内存管理 3.1内存管理概念 3.1部分习题 3.内存管理 3.1内存管理概念 3.1部分习题 1.内存保护需要由&#xff08;&#xff09;完成&#xff0c;以保证进程空间不被非法访问 A.操作系统 B.硬件机构 C.操作系统和硬件机构合作 D.操作系统或硬件…