parent
435cefc3df
commit
7cdb221faf
5 changed files with 109 additions and 44 deletions
@ -1,42 +1,74 @@ |
|||||||
<template> |
<template> |
||||||
<div class="todo-bottom"> |
<div class="todo-bottom" v-show="total"> |
||||||
<label> |
<label> |
||||||
<input type="checkbox"> |
<input type="checkbox" v-model="isAll"> |
||||||
</label> |
</label> |
||||||
<span> |
<span> |
||||||
<span>已完成0</span>/全部2 |
<span>已完成{{ totalDone }}</span>/全部{{ total }} |
||||||
</span> |
</span> |
||||||
<button class="btn btn-danger">清除已完成任务</button> |
<button class="btn btn-danger" @click="clearAll">清除已完成任务</button> |
||||||
</div> |
</div> |
||||||
</template> |
</template> |
||||||
|
|
||||||
<script> |
<script> |
||||||
export default { |
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> |
</script> |
||||||
|
|
||||||
<style scoped> |
<style scoped> |
||||||
.todo-bottom{ |
.todo-bottom { |
||||||
height: 40px; |
height: 40px; |
||||||
line-height: 40px; |
line-height: 40px; |
||||||
padding-left: 6px; |
padding-left: 6px; |
||||||
margin-top: 5px; |
margin-top: 5px; |
||||||
} |
} |
||||||
|
|
||||||
.todo-bottom label{ |
.todo-bottom label { |
||||||
display: inline-block; |
display: inline-block; |
||||||
margin-right: 20px; |
margin-right: 20px; |
||||||
cursor: pointer; |
cursor: pointer; |
||||||
} |
} |
||||||
.todo-bottom label input { |
|
||||||
|
.todo-bottom label input { |
||||||
position: relative; |
position: relative; |
||||||
top: -1px; |
top: -1px; |
||||||
vertical-align: middle; |
vertical-align: middle; |
||||||
margin-right: 5px; |
margin-right: 5px; |
||||||
} |
} |
||||||
.todo-bottom button { |
|
||||||
|
.todo-bottom button { |
||||||
float: right; |
float: right; |
||||||
margin-top: 5px; |
margin-top: 5px; |
||||||
} |
} |
||||||
</style> |
</style> |
Loading…
Reference in new issue