news 2026/6/14 22:17:02

用户点击 checkbox → 触发 (change) 事件流程详细介绍

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用户点击 checkbox → 触发 (change) 事件流程详细介绍

流程图

A[用户点击 checkbox]-->B[(change)触发onChecked(item,'testType')]B-->C[方法内部判断 selectedFilter==='testType']C-->|true|D[选择目标数组 targetList=selectedTestType]C-->|false|E[选择空数组 targetList=[]]D-->F[遍历 testTypeList 找到 item]F-->G[切换 item.checked状态(true<->false)]G-->H[更新 selectedTestType]H-->I[selectedTestType=testTypeList.filter(item.checked)]I-->J[页面通过*ngFor="let item of testTypeList"更新 checkbox 状态]I-->K[页面通过*ngFor="let item of selectedTestType"更新已选列表显示]
  1. 用户点击 checkbox → 触发 (change) 事件

  2. onChecked 方法:

根据 ‘testType’ 判断目标数组(这里是 selectedTestType)

遍历 testTypeList 找到点击的 item,切换它的 checked 状态

  1. 更新已选数组:

通过 filter 把所有 checked = true 的 item 放入 selectedTestType

  1. 页面更新:

*ngFor=“let item of testTypeList” → checkbox 选中状态同步

*ngFor=“let item of selectedTestType” → 已选列表显示最新内容

```javascript <div *ngFor="let item of testTypeList"> <input type="checkbox" [checked]="item.checked" (change)="onChecked(item, 'testType')" /> {{ item.name }} </div>
onChecked(event:any,selectedFilter:string){consttargetList=selectedFilter==='testType'?this.selectedTestType:[];this.testTypeList.forEach(item=>{if(item.name===event.name){item.checked=!item.checked;}});// 更新 selectedTestTypethis.selectedTestType=this.testTypeList.filter(item=>item.checked);}

HTML 部分

<div*ngFor="let item of testTypeList"><input type="checkbox"[checked]="item.checked"(change)="onChecked(item, 'testType')"/>{{item.name}}</div>

解释:

  1. *ngFor=“let item of testTypeList”
  • 遍历 testTypeList 数组,为每个元素渲染一个 和对应的名字。
  1. [checked]=“item.checked”
  • 属性绑定,把 item.checked 的布尔值绑定到 checkbox 的 checked 属性上。

  • 作用:根据 item.checked 的值决定 checkbox 是否被选中。

  1. (change)=“onChecked(item, ‘testType’)”
  • 事件绑定,监听 checkbox 的 change 事件(用户点击 checkbox 后触发)。

  • 触发时调用组件方法 onChecked,传入:

    • item → 当前 checkbox 对应的对象

    • ‘testType’ → 用于区分不同的过滤类型或用途(这里是 testType)

2. TypeScript 部分

onChecked(event:any,selectedFilter:string){consttargetList=selectedFilter==='testType'?this.selectedTestType:[];this.testTypeList.forEach(item=>{if(item.name===event.name){item.checked=!item.checked;}});// 更新 selectedTestTypethis.selectedTestType=this.testTypeList.filter(item=>item.checked);}

解释逐行:

  1. const targetList = selectedFilter === ‘testType’ ? this.selectedTestType : [];
  • 根据 selectedFilter 判断目标列表(这里只有 ‘testType’,所以就是 selectedTestType)

  • 目前这里定义了 targetList,但后面实际没用到它,可以认为是占位或者未来扩展用。

  1. this.testTypeList.forEach(item => { … })
  • 遍历原始数组 testTypeList

  • 找到和当前点击的 item(event.name 相同)

  • 执行 item.checked = !item.checked; → 切换勾选状态(选中 → 取消,取消 → 选中)

  1. this.selectedTestType = this.testTypeList.filter(item => item.checked);
  • 根据最新的 checked 状态更新 selectedTestType

  • 结果:selectedTestType 只包含被选中的测试类型

3. [checked] + (change) 的作用总结

写法含义
[checked]="item.checked"根据数据决定 checkbox 是否选中
(change)="onChecked(item, 'testType')"用户点击 checkbox 后触发事件,调用方法更新数据

4. (change)=“onChecked(item, ‘testType’)” /> const targetList = selectedFilter === ‘testType’ ? this.selectedTestType : []; 关系和含义

1️⃣ (change)=“onChecked(item, ‘testType’)”

  • 作用:监听 的 change 事件。

  • 用户每次点击 checkbox(选中或取消)时,就会触发 change 事件。

  • 调用组件方法 onChecked,传入两个参数:

    • item → 当前 checkbox 对应的数据对象(例如 { name: ‘DRE’, checked: true })

    • ‘testType’ → 表示这是 “测试类型” 的 checkbox,用于方法内部区分不同类别的 checkbox 或过滤类型

== 理解:这行代码实现了 用户操作 → 调用方法更新数据 的连接。==

2️⃣ const targetList = selectedFilter === ‘testType’ ? this.selectedTestType : [];

  • 作用:在 onChecked 方法里,根据 selectedFilter 的值选择对应的目标数组。

  • 解释逻辑:

selectedFilter==='testType'?this.selectedTestType// 如果是 testType,则操作 selectedTestType:[]// 否则返回空数组(可以扩展其他类型)
  • 用法:

  • targetList 本质上是一个 引用变量,理论上可以用它来操作选中数组,例如 push 或 splice。

  • 在你提供的代码里,targetList 目前没有被直接使用,实际上更新 selectedTestType 是通过:

  • this.selectedTestType = this.testTypeList.filter(item => item.checked);

  • 所以 targetList 这里相当于 占位或备用变量,未来可以用来扩展支持其他类型的 checkbox。

总结两行的关系

  • (change)=“onChecked(item, ‘testType’)”

  • 触发事件,把用户点击的 checkbox 和类型 ‘testType’ 传给方法

  • const targetList = selectedFilter === ‘testType’ ? this.selectedTestType : [];

  • 方法内部根据类型选择操作的目标数组(这里是 selectedTestType)

  • 当前代码里未直接使用 targetList,但逻辑上用于支持多类型 checkbox 管理

💡 理解技巧:

change → 用户动作触发

‘testType’ → 类型标识

targetList → 根据类型选择对应的操作数组

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 11:30:53

19、探索Mac OS X下的Perl编程:从入门到网站链接检查实践

探索Mac OS X下的Perl编程:从入门到网站链接检查实践 1. Perl简介 Perl是Larry Wall在20世纪80年代末发明的编程语言。当时,他需要一种比shell脚本功能更强大,但又比C等结构化语言更灵活的语言,于是Perl应运而生。Perl是一种让人又爱又恨的语言,很少有人对它持中立态度。…

作者头像 李华
网站建设 2026/6/15 2:32:36

SpringBoot+Vue 房屋租赁管理系统管理平台源码【适合毕设/课设/学习】Java+MySQL

摘要 随着城市化进程的加快和人口流动性的增加&#xff0c;房屋租赁市场需求持续增长&#xff0c;传统的手工管理方式已无法满足高效、便捷的租赁管理需求。房屋租赁管理系统通过信息化手段整合房源信息、租客数据及合同管理&#xff0c;有效提升租赁业务的透明度和效率。该系统…

作者头像 李华
网站建设 2026/6/15 11:26:15

23、构建用户认证与个性化推荐系统

构建用户认证与个性化推荐系统 在当今的互联网应用中,用户认证和个性化服务是提升用户体验的关键要素。我们将构建一个名为 PHPBookmark 的在线书签系统,它能让用户注册、登录,存储个人书签,并根据用户偏好推荐其他可能感兴趣的网站。 项目需求与功能概述 我们要实现的系…

作者头像 李华
网站建设 2026/6/12 20:03:29

31、PHP与MySQL安装指南

PHP与MySQL安装指南 1. 运行PHP的方式 PHP解释器可以作为模块或单独的CGI二进制文件运行。通常,出于性能考虑会使用模块版本。不过,在没有模块版本的服务器上,或者为了让Apache用户能以不同用户ID运行不同的PHP页面,有时会使用CGI版本。此外,易于使用的Windows安装程序采…

作者头像 李华
网站建设 2026/6/14 13:58:04

企业级福泰轴承股份有限公司进销存系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】

摘要 随着制造业数字化转型的加速&#xff0c;企业对高效、精准的进销存管理需求日益增长。传统的手工记录和单机版管理系统已无法满足现代企业的业务需求&#xff0c;尤其在库存管理、订单跟踪和数据分析方面存在效率低下、数据孤岛等问题。福泰轴承股份有限公司作为一家专注于…

作者头像 李华
网站建设 2026/6/15 7:33:01

9、资源、产品与信息系统的虚拟化

资源、产品与信息系统的虚拟化 1. 协作产品和资源工作负载的虚拟化 在分布式制造执行系统(MES)层,本地工作负载直接连接到工厂的物理实体,即当前正在执行的资源和产品。对这些实体进行虚拟化,能够以池模型在运行时管理硬件和软件控制资源,使多个受益方(产品订单)可按…

作者头像 李华