当前位置: 首页 > news >正文

<input type=“text“ placeholder=“Search..“ [(ngModel)]=“searchText“ (input)=“search()“ />代码分析

flowchartTDA[用户在输入框输入]-->B[(ngModel)更新 searchText]B-->C[(input)调用search()]C-->D[过滤 testTypeList 得到 filteredTestTypeList]D-->E[页面显示过滤后的列表]F[用户点击复选框]-->G[toggleTestType(item)]G-->H{item.checked?}H-->|true且未在 selectedTestType|I[加入 selectedTestType]H-->|false且在 selectedTestType|J[从 selectedTestType 删除]I-->K[页面显示更新后的已选列表]J-->K
<divclass="dropdown"><input type="text"placeholder="Search.."[(ngModel)]="searchText"(input)="search()"/><div*ngFor="let item of filteredTestTypeList"class="option"><input type="checkbox"[checked]="item.checked"(change)="toggleTestType(item)"/><label>{{item.name}}</label></div><button(click)="applyFilter()">Apply Filter</button><divclass="selected-items"><span*ngFor="let item of selectedTestType">{{item.name}}</span></div></div>
import{Component,OnInit,Output,EventEmitter}from'@angular/core';interfaceTestTypeItem{name:string;value:string;checked?:boolean;}@Component({selector:'app-location-test-type',templateUrl:'./location-test-type.component.html',styleUrls:['./location-test-type.component.css']})exportclassLocationTestTypeComponentimplementsOnInit{// 搜索输入searchText:string='';// 全部 Test Type 列表testTypeList:TestTypeItem[]=[{name:'test1',value:'test1'},{name:'test2',value:'test2'},{name:'test3',value:'test3'}];// 用户选中的 Test TypeselectedTestType:TestTypeItem[]=[];// 搜索后的列表filteredTestTypeList:TestTypeItem[]=[];// 把选中数据 emit 给父组件@Output()selected=newEventEmitter<TestTypeItem[]>();ngOnInit():void{this.filteredTestTypeList=[...this.testTypeList];}// 选中 / 取消toggleTestType(item:TestTypeItem){item.checked=!item.checked;constindex=this.selectedTestType.findIndex(x=>x.name===item.name);if(item.checked&&index===-1){this.selectedTestType.push(item);}elseif(!item.checked&&index>-1){this.selectedTestType.splice(index,1);}}// 搜索search(){consttext=this.searchText.toLowerCase();this.filteredTestTypeList=this.testTypeList.filter(item=>item.name.toLowerCase().includes(text));}// 应用 FilterapplyFilter(){// Emit 给父组件this.selected.emit(this.selectedTestType);}}

1. [(ngModel)]=“searchText”

这是 Angular 的 双向数据绑定。

ngModel 是 Angular Forms 模块提供的指令,用来绑定表单控件(如 )的值和组件里的属性。

[(…)] 是 双向绑定语法糖(也叫 Banana in a box,因为看起来像 [(…)])。

作用:
视图 → 组件:用户在输入框输入内容时,组件里的 searchText 会自动更新。

组件 → 视图:如果在组件里修改了 searchText,输入框的值也会自动更新。

举例:

// component.tssearchText='初始值';<input type="text"[(ngModel)]="searchText"/>

页面输入框会显示“初始值”

用户修改输入框的内容时,searchText 会跟着更新

2. (input)=“search()”

这是 事件绑定,表示监听 input 事件:

当用户在输入框里输入内容时,会触发 input 事件。

触发后调用组件里的 search() 方法。

结合 [(ngModel)]:

<input type="text"[(ngModel)]="searchText"(input)="search()"/>

逻辑就是:

  • 用户输入 → searchText 更新

  • search() 方法执行 → 根据最新的 searchText 过滤列表

总结

语法作用
[(ngModel)]="searchText"双向绑定输入框和组件属性,保证视图和数据同步
(input)="search()"监听用户输入事件,每次输入触发搜索方法

所以组合起来就是:
用户每输入一个字符 → 更新 searchText → 调用 search() → 更新 filteredTestTypeList → 页面显示最新过滤后的列表。

http://www.cnnetsun.cn/news/74815.html

相关文章:

  • ComfyUI与Mosquitto MQTT代理集成:物联网场景适配
  • 7、脚本编程中的代码片段与替代语法技巧
  • 15、使用 AWK 总结日志
  • ComfyUI插件生态盘点:提升效率的必备扩展推荐
  • 程序员爆哭!我们让 COCO AI 接管 GitLab 审查后,团队直接起飞:连 CTO 都说“这玩意儿比人靠谱多了
  • 交通信号仿真软件:Synchro_(14).Synchro与其他软件的集成
  • 交通信号仿真软件:Vistro_(1).Vistro软件介绍
  • 交通信号仿真软件:Vistro_(4).交通网络建模
  • 微软将影响在线服务的第三方漏洞纳入奖励计划
  • 42、Linux 图形界面与邮件服务器配置全解析
  • 47、Linux系统安全防护全解析
  • 48、Linux系统安全:PAM、文件权限与网络防护
  • Blender贝塞尔曲线终极指南:用Bezier Utilities插件快速掌握曲线编辑技巧
  • 3步轻松制作Windows 11精简版:让老旧电脑焕发新生
  • SCS 59.单细胞空间转录组空间度量(SPATA2)
  • 【毕业设计】基于springboot高校体育运动会比赛系统运动项目、运动论坛(源码+文档+远程调试,全bao定制等)
  • 干货收藏:AI大模型进化史,从ChatGPT到智能体的三次关键跃迁
  • Docker Compose编排LLama-Factory多节点训练集群详细配置示例
  • Wan2.2-T2V-A14B模型部署指南:从VSCode配置C/C++环境说起
  • 计算机Java毕设实战-基于springboot公寓管理系统基于Springboot的公寓报修管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 如何制作支持离线地图的GPS自行车码表:从硬件选型到功能实现的完整指南
  • 计算机Java毕设实战-基于springboot国风彩妆网站springboot国风彩妆化妆品网站电商销售商城系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • Honey Select 2 HF Patch技术架构深度解析与模块化部署指南
  • 【课程设计/毕业设计】基于springboot的自习室预订系统设计与实现基于springboot高校自习室预约系统的设计与实现【附源码、数据库、万字文档】
  • 大学计算机基础系列(合集)
  • 【课程设计/毕业设计】基于Web的高校大学生奖学金评定系统设计与实现基于springboot高校学生奖学金评定系统的设计与实现【附源码、数据库、万字文档】
  • 【爬虫框架-8】其他
  • Vue-next-admin终极指南:打造现代化后台管理系统的完整解决方案
  • vgmstream终极指南:游戏音频转换与播放全攻略
  • vgmstream音频解码神器:游戏音频格式转换终极指南