day80-todolist组件自定义事件改进
通过自定义组件改进todolist案例,不全使用prop方式
header组件
<template> <div class="todo-header"> <input type="text" placeholder="请输入你的任务名称,按回车键确认" v-model="title" @keyup.enter="add"/> </div> </template> <script> import {nanoid} from 'nanoid' export default { name: "HeaderCom", // props:['addTodo'],//接受传入addTodo data(){ return{ title:''//收集用户输入的title } }, methods:{ add(){ //校验数据 if (!this.title.trim()) return alert("输入不能为空") //将输入包装成todo对象 const todoObj={id:nanoid(),title:this.title,done:false} //通知app组件添加一个todo对象 this.$emit('addTodo',todoObj) //清空输入 this.title='' } }, } </script>
footer
<template> <div class="todo-footer" v-show="total"> <label> <!-- <input type="checkbox" :checked="isAll" @change="checkAll"/>--> <input type="checkbox" :checked="isAll" @change="checkAll"/> </label> <span> <span>已完成{{doneTodo}}</span> / 全部{{total}} </span> <button class="btn btn-danger" @click="clearAll">清除已完成任务</button> </div> </template> <script> export default { name: "FooterCom", props: ['todoList'], computed:{ total() { return this.todoList.length }, doneTodo() { // return this.todoList.filter(todo => todo.done === true).length return this.todoList.reduce((pre,todo)=>pre+(todo.done ? 1 : 0),0) }, isAll() { return this.doneTodo === this.total && this.total > 0 } }, methods: { checkAll(e){ this.$emit('checkAllTodo', e.target.checked) // this.checkAllTodo(e.target.checked) }, clearAll() { if(confirm("确定清除吗?")){ this.$emit('clearAllTodo') // this.clearAllTodo() } } } } </script>
list与item还是使用prop传递双层消息
app
<template> <div id="app"> <div class="todo-container"> <div class="todo-wrap"> <HeaderCom @addTodo="addTodo"></HeaderCom> <ListCom :todoList="todoList" :checkTodo="checkTodo"></ListCom> <FooterCom :todoList="todoList" @checkAllTodo="checkAllTodo" @clearAllTodo="clearAllTodo"></FooterCom> </div> </div> </div> </template>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!