parent
							
								
									435cefc3df
								
							
						
					
					
						commit
						7cdb221faf
					
				
				 5 changed files with 109 additions and 44 deletions
			
			
		| @ -1,42 +1,74 @@ | ||||
| <template> | ||||
|   <div class="todo-bottom"> | ||||
|   <div class="todo-bottom" v-show="total"> | ||||
|     <label> | ||||
|       <input type="checkbox"> | ||||
|       <input type="checkbox" v-model="isAll"> | ||||
|     </label> | ||||
|     <span> | ||||
|       <span>已完成0</span>/全部2 | ||||
|       <span>已完成{{ totalDone }}</span>/全部{{ total }} | ||||
|     </span> | ||||
|     <button class="btn btn-danger">清除已完成任务</button> | ||||
|     <button class="btn btn-danger" @click="clearAll">清除已完成任务</button> | ||||
|   </div> | ||||
| </template> | ||||
| 
 | ||||
| <script> | ||||
| export default { | ||||
|   name: "TodoBottom" | ||||
|   name: "TodoBottom", | ||||
|   props: ['todos', 'checkAllTodo', 'clearAllTodo'], | ||||
|   computed: { | ||||
|     // 用于计算全部todo任务的总数量,并且通过v-show绑定到模板,用于控制模板的展示 | ||||
|     total() { | ||||
|       return this.todos.length | ||||
|     }, | ||||
|     // 用于统计全部已完成的todo任务数量 | ||||
|     totalDone() { | ||||
|       return this.todos.reduce((pre, todo) => pre + (todo.done ? 1 : 0), 0) | ||||
|     }, | ||||
|     // 计算方法的完整写法 | ||||
|     // get方法用于判断是否全部任务被勾选, 返回布尔值 | ||||
|     // set方法是封装了App中checkAllTodo方法用于勾选和取消勾选全部任务 | ||||
|     isAll: { | ||||
|       get() { | ||||
|         return this.totalDone === this.total && this.total > 0 | ||||
|       }, | ||||
|       set(value) { | ||||
|         this.checkAllTodo(value) | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|     // 封装App中的clearAllTodo方法,用于清除全部已完成数据 | ||||
|     clearAll() { | ||||
|       if (confirm("确认清除全部已完成任务?")) { | ||||
|         this.clearAllTodo() | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
| 
 | ||||
| <style scoped> | ||||
|   .todo-bottom{ | ||||
|     height: 40px; | ||||
|     line-height: 40px; | ||||
|     padding-left: 6px; | ||||
|     margin-top: 5px; | ||||
|   } | ||||
| .todo-bottom { | ||||
|   height: 40px; | ||||
|   line-height: 40px; | ||||
|   padding-left: 6px; | ||||
|   margin-top: 5px; | ||||
| } | ||||
| 
 | ||||
|   .todo-bottom label{ | ||||
|     display: inline-block; | ||||
|     margin-right: 20px; | ||||
|     cursor: pointer; | ||||
|   } | ||||
|   .todo-bottom label input { | ||||
|     position: relative; | ||||
|     top: -1px; | ||||
|     vertical-align: middle; | ||||
|     margin-right: 5px; | ||||
|   } | ||||
|   .todo-bottom button { | ||||
|     float: right; | ||||
|     margin-top: 5px; | ||||
|   } | ||||
| .todo-bottom label { | ||||
|   display: inline-block; | ||||
|   margin-right: 20px; | ||||
|   cursor: pointer; | ||||
| } | ||||
| 
 | ||||
| .todo-bottom label input { | ||||
|   position: relative; | ||||
|   top: -1px; | ||||
|   vertical-align: middle; | ||||
|   margin-right: 5px; | ||||
| } | ||||
| 
 | ||||
| .todo-bottom button { | ||||
|   float: right; | ||||
|   margin-top: 5px; | ||||
| } | ||||
| </style> | ||||
					Loading…
					
					
				
		Reference in new issue