vue小案例TodoList

news2025/1/11 7:37:55

1.首先我们分析怎么把一个页面拆成多个组件,如下图,我们可以拆成MyHeader、MyList、MyItem、MyFooter,其中MyList包含MyItem

2.观看如下代码(我们把MyItem作为MyList的子组件,在父组件中使用v-for指令来循环展示子组件,我们选择把数据放在MyList中,我们在子组件中使用props来接收父组件传过来的数据)

注意!!!

注意此处我们使用v-for循环遍历todos里的每一个对象,我们将每个对象传给子组件的时候,指令名的前面需要加:,如上图中的:todo="todoObj",如果我们写成todo="todoObj"的话,我们将会得到一下结果,因为此时,vue不会将todoObj视为对象,而我们加上:时,todoObj将会变成一个表达式

 

3.相对于MyList的子组件MyItem,通过props接收而来的数据决定MyItem中的展示

4.接下来我们来做MyHeader部分(我们需要在MyHeader部分的input框中输入数据,并且把它封装成一个对象,但是为了区分id,我们可以使用UUID,但是UUID包的内存较大,我们可以使用UUID的变种nanoid)

接下来,我们就会遇到一个难题,我们在MyHeader中产生的数据,如何传给对象数组数据所在的MyList呢?由于我们还没有学到全局事件总线等方法,我们这里可以采用将数据上调的方式来解决

我们采取将数据上调到父组件APP中,再让子组件通过props来接收,注意此处我们将addTodo作为一个函数传给子组件,让子组件用props接收,然后再让子组件在合适的情况下调用,实现了子组件向父组件传递数据的功能

 

5.接下来我们开始做勾选框模块

写法一:

接下来涉及到一个问题,我们怎么把MyItem(孙组件)中勾选发生的变化传到APP(爷组件)中发生对象数组中的done值的变化呢?

我们这里可以采用爷传子,子传孙的方法,我们可以给APP(爷组件)绑定一个函数,将函数逐层传递到MyList(子组件),再传到MyItem(孙组件),例如下方

孙组件用props接收后,通过this.的方式,把id逐层传给APP组件,引起对象数组done值的变化

 

 

写法二(我们可以使用v-model来实现监视,但是不建议这么做,因为props为只读属性,当props里的浅层次属性发生变化时会报错,例如图中的a;当v-model读取props中的深层次属性时,不会报错,但不建议这么做):

 6.接下来我们来做删除模块,由于数据在APP中,我们在MyItem组件中给删除按钮添加点击事件,我们获取APP传来的todo对象数组中的id,我们将id传给爷组件APP,这时又是老生常谈的问题,孙组件向爷组件传递数据,我们可以让APP组件下方一个函数,依次传递给MyList和MyItem,通过props接收,再在子组件标签上带上该函数

 

 7.接下来我们来做统计模块,首先先将APP组件中的对象数组数据传给MyFooter组件,MyFooter组件利用props来接收,让MyFooter组件来计算统计模块,这里计算已完成的个数,用到了数组中的reduce方法

注意,此处的checkAllTodo方法是由APP组件传过来的

注意图中的isAll计算属性是是由total和doneTotal计算而来的,其中total是返回APP中对象数组的总长度,而 checkAllTodo是计算对象数组中被勾选的个数,isAll只需要判断total的值和checkAllTodo的值是否相等即可

方式一:

方式二:(第二种方式使用的是v-model,其中get()方法判断单选框是否与对象数组的长度相一致,如果一致就勾上;set()方法使其勾选时,通知APP组件遍历对象,勾上所有对象的done值,其中这里计算属性就无法使用简写形式,因为其利用到了赋值操作

最后我们来完成清除已完成任务,同样在APP中声明此方法,再传递给MyFooter组件,组件用props接收

 

我们可以通过js中的本地存储将数据存储起来

 

总结:

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

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

相关文章

【java基础】Map集合

大家好👋,今天我来给大家科普一下Java中的map集合。map是Java中非常重要的数据结构之一,经常被用于存储键值对。 【有关这部分知识的思维导图放在文章末尾了,需要的C友请自取】 正文开始: 一、Map集合概述 我们知道&…

柱状图中最大的矩形

题目链接 柱状图中最大的矩形 题目描述 注意点 无 解答思路 暴力破解根据每根柱子x以x的高度作为矩形的高度找到其相邻能组成矩形的柱子,遍历所有柱子即可找到最大矩形,但是时间复杂度是O(n),最终运行结果也超时了上面暴力破解的方法中…

MKS SERVO4257D 闭环步进电机_系列4 MODBUS指令说明

第1部分 产品介绍 MKS SERVO 28D/35D/42D/57D 系列闭环步进电机是创客基地为满足市场需求而自主研发的一款产品。具备脉冲接口和RS485/CAN串行接口,支持MODBUS-RTU通讯协议,内置高效FOC矢量算法,采用高精度编码器,通过位置反馈&am…

基于Android的视频分享平台的设计与实现

基于Android的视频分享平台的设计与实现 摘 要 短视频平台是以特定群众为目标的差异化群体定位工具。其利用自身的便捷性可以实现视频的随时拍摄和随时上传,可以产生亚文化圈的萌芽。这种开放便利的特性在吸引了广大用户的同时,也在一定程度上解决了由…

C#面试题 2

七、AOP如何在代码层面实现? ①静态代理实现AOP,自己写代理对象; ②动态代理实现AOP,运行时动态生成一个代理对象。 静态代理的实现:①装饰器模式(允许向一个现有的对象添加新的功能,同时又不…

Doris----Rollup表分析及案例实现

ROLLUP 在多维分析中是“上卷”的意思,即将数据按某种指定的粒度进行进一步聚合。 之前的聚合模型: 用户id数据插入时间城市年龄性别最后一次访问的时间该用户的总消费额该用户的最大停留时长该用户的最小停留时长100002017/10/2北京1002017/10/02 08:00:00651521…

C++:STL--List

文章目录 一.STL-list的数据结构链表结点模板 二.List的框架与迭代器的实现1.STL中的容器迭代器2.List的迭代器List正向遍历迭代器类模板(对ListNode< T >* 指针的封装)反向遍历迭代器的类模板(对正向迭代器的封装) 3.List的实现框架 三. List的成员接口的实现1.在List类…

GPT-4发布!ChatGPT大升级!太太太太强了!

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 我新建了人工智能中文站https://ai.weoknow.com 每天给大家更新可用的国内可用chatGPT资源 一觉醒来&#xff0c;万众期待的GPT-4&#xff0c;它来了&#xff01; OpenAI老板Sam Altman直接开门见山地介绍说&#xff1a…

C语言之数组指针2.0

在 C 语言中&#xff0c;数组指针是一种特殊的指针类型&#xff0c;它是一个指向数组的指针。其声明形式为&#xff1a; <数据类型> (*<指针变量名>)[<数组长度>];例如&#xff0c;下面声明了一个指向整型数组的指针变量 arrPtr&#xff1a; int (*arrPtr)…

数据等级划分

数据大致可以分为定性数据与定量数据&#xff0c;但细分可以分为四类&#xff1a;定类数据、定序数据、定距数据、定比数据 处理数据的流程&#xff1a; 参考&#xff1a; 特征工程入门与实践

如何使用ChatGPT提升自己的“码”力?

如何使用chatGPT提升自己的"码"力? 代码评审(CodeReview)代码优化代码释义提供解决方案代码生成设计模式和架构建议学习新知识总结 ChatGPT是什么&#xff0c;我就不用再多介绍了吧&#xff01;相信大家已经看到了它在文本领域所展现出来的实力&#xff0c;虽然目前…

PAT A1152 Google Recruitment

1152 Google Recruitment 分数 20 作者 陈越 单位 浙江大学 In July 2004, Google posted on a giant billboard along Highway 101 in Silicon Valley (shown in the picture below) for recruitment. The content is super-simple, a URL consisting of the first 10-dig…

2023商家外卖数据

商家列表 外卖商品销量 shop_channel varchar(20) DEFAULT NULL, shop_system varchar(20) DEFAULT NULL, shop_system_no varchar(50) DEFAULT NULL, shop_platform varchar(20) DEFAULT NULL, shop_id varchar(50) NOT NULL, shop_id_str varchar(50) NO…

ChatGPT自动生成思维导图

&#x1f34f;&#x1f350;&#x1f34a;&#x1f351;&#x1f352;&#x1f353;&#x1fad0;&#x1f951;&#x1f34b;&#x1f349; ChatGPT自动生成思维导图 文章目录 &#x1f350;问题引入&#x1f350;具体操作markmapXmind &#x1f433;结语 &#x1f…

【Web】JWT(JSON Web Token)验证是什么?和SWT,SMAL的区别

JWT是什么&#xff1f; JWT&#xff08;JSON Web Token&#xff09;是一种轻量级的安全传输方式&#xff0c;可以用于在不同的系统之间传递安全可靠的信息&#xff0c;例如用户身份验证、授权和信息交换等。JWT采用JSON格式对信息进行编码和传输&#xff0c;用于在各方之间以 …

SpringCloud:分布式缓存之Redis持久化

Redis有两种持久化方案&#xff1a; RDB持久化AOF持久化 1.RDB持久化 RDB全称Redis Database Backup file&#xff08;Redis数据备份文件&#xff09;&#xff0c;也被叫做Redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当Redis实例故障重启后&#xff0c;…

如何安装389目录服务器作为CentOS 8 / RHEL 8机器的LDAP服务器?

LDAP&#xff08;轻量级目录访问协议&#xff09;是一种用于访问和维护分布式目录服务的开放标准协议。 389目录服务器是一个功能强大、高性能的LDAP服务器&#xff0c;它可以用于存储和管理用户、组和其他网络对象的身份验证和授权信息。本文将详细介绍如何在CentOS 8 / RHEL…

学生成绩管理系统

基于springboot vue实现的学生成绩管理系统 主要模块&#xff1a; 1&#xff09;学生模块&#xff1a;我的成绩、成绩统计、申述管理、修改密码 2&#xff09;教师模块&#xff1a;任务管理、对学生班级任务安排、班级学生的成绩查看、申述管理 3&#xff09;管理员模块&…

(可直接使用)在线语音识别APP+阿里云平台+Android Studio 开发项目

目录 所以需要下载软件 (1)Android Studio (2)夜神模拟器 1&#xff1a;在阿里云平台中&#xff0c;登录账号&#xff0c;选择控制台&#xff0c;搜索 智能语音交互 2&#xff1a;智能语音交互 界面 3:创建项目 4&#xff1a;选择项目类别 可以选择 语音识别语…

C++初识仿函数

C初识仿函数 &#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;C &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 本博客主要内容简单介绍了仿函数的概念 文章目录 C初识仿函数…