<template> <div class="todo-footer" v-show="total"> <label> <!-- <input type="checkbox" :checked="isAll" @change="checkAll"/> --> <input type="checkbox" v-model="isAll"/> </label> <span> <span>已完成{{doneTotal}}</span> / 全部{{ total }} </span> <button class="btn btn-danger" @click="clearAll">清除已完成任务</button> </div> </template> <script> export default { name: "MyFooter", props: ['todos'], computed:{ //任务总数 total(){ return this.todos.length }, //已完成任务数 doneTotal(){ // const x = this.todos.reduce((pre,current)=>{ // console.log('@@',pre) // return pre + (current.done ? 1 : 0) // },0) // console.log('###',x) // 代码简化 return this.todos.reduce((pre,todo)=>pre + (todo.done ? 1 : 0),0) }, // reduce里面的函数会调用三次,第一次调用的时候,pre的初始值是reduce的第二个参数(本例中为0) //从第二次开始,pre的值都是上一次调用函数的返回值 //current是每一个元素对象 // isAll(){ // return this.doneTotal === this.total && this.total > 0 // } //是否全选 isAll:{ get(){ return this.doneTotal === this.total && this.total > 0 }, set(value){ // this.checkAllTodo(value) this.$emit('checkAllTodo',value) } } }, methods:{ // checkAll(e){ // // console.log(e.target.checked) // this.checkAllTodo(e.target.checked) // }, //清除已完成的任务 clearAll(){ this.$emit('cleatAllTodo') } } }; </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>