news 2026/7/7 18:57:42

Angular demo(简化版,但保留选中、取消、Filter 应用、再次查看的逻辑)代码详细介绍

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Angular demo(简化版,但保留选中、取消、Filter 应用、再次查看的逻辑)代码详细介绍

业务逻辑梳理

业务流程:

  1. 初始化:
  • 可能有历史选中值(previousAppliedFilters)

  • 把历史值 normalize 成对象数组 { name, value, checked }

  1. 选中 / 取消 Test Type:
  • 点击 checkbox 或标签上的 ×

  • 对象的 checked 属性同步更新

  • 选中列表 selectedTestType / selectedLocationTestType 同步更新

  1. 应用 Filter:
  • 点击 “Apply Filter”

  • 将选中值整理(可选择发送给后端,或者 emit 给父组件)

  • 可以保存为 previousAppliedFilters 方便下次打开初始化

  1. 再次查看:
  • Filter 应用后,重新打开弹窗

  • 初始化逻辑会用 previousAppliedFilters 恢复选中状态

  • UI 显示已选项(标签 + ×)


scheduling-filter.component.html

<!--scheduling-filter.component.html--><div><h3>Test Type Filter</h3><div*ngFor="let item of testTypeList"><input type="checkbox"[checked]="item.checked"(change)="onChecked(item, 'testType')"/>{{item.name}}</div><div><h4>Selected Test Types:</h4><span*ngFor="let item of selectedTestType">{{item.name}}<button(click)="removeTestType(item)">×</button></span></div><button(click)="applyFilter()">Apply Filter</button></div>

scheduling-filter.component.ts

// scheduling-filter.component.tsimport{Component,OnInit,Output,EventEmitter}from'@angular/core';@Component({selector:'app-scheduling-filter',templateUrl:'./scheduling-filter.component.html',styleUrls:['./scheduling-filter.component.css']})exportclassSchedulingFilterComponentimplementsOnInit{@Output()appliedFilter=newEventEmitter<any>();// 模拟 Test Type 数据testTypeList=[{name:'BDS',value:'BDS',checked:false},{name:'DRE',value:'DRE',checked:false},{name:'MRI',value:'MRI',checked:false}];selectedTestType:any[]=[];searchedTestType:any[]=[];previousAppliedFilters:any={testType:['BDS']// 历史选中};ngOnInit():void{// 初始化历史值if(this.previousAppliedFilters.testType?.length){this.selectedTestType=this.previousAppliedFilters.testType.map((t:any)=>{if(typeoft==='string')return{name:t,value:t,checked:true};if(t?.name)return{...t,checked:true};returnnull;}).filter(Boolean);// 同步 testTypeList checkedthis.testTypeList.forEach(item=>{item.checked=this.selectedTestType.some(sel=>sel.name===item.name);});this.searchedTestType=[...this.testTypeList];}}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);}removeTestType(item:any){item.checked=false;this.selectedTestType=this.selectedTestType.filter(sel=>sel.name!==item.name);}applyFilter(){console.log('Apply Filter Selected:',this.selectedTestType);this.appliedFilter.emit({testType:this.selectedTestType.map(t=>({...t}))// 深拷贝});// 保存历史选中this.previousAppliedFilters.testType=this.selectedTestType.map(t=>t.name);}}

app.component.html

<app-scheduling-filter(appliedFilter)="onAppliedFilter($event)"></app-scheduling-filter>

app.component.ts

onAppliedFilter(selected:any[]){console.log('父组件收到选中数据:',selected);}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/7 16:41:39

Flutter 状态管理深度解析:Provider 与 Riverpod 核心原理及实战对比

目录 引言&#xff1a;状态管理为何是 Flutter 开发的核心痛点Provider&#xff1a;基于 InheritedWidget 的经典状态管理方案2.1 Provider 核心原理2.2 Provider 实战&#xff1a;基础 Todo 列表实现Riverpod&#xff1a;Provider 的 “升级版” 核心改进3.1 Riverpod 核心优…

作者头像 李华
网站建设 2026/7/7 17:52:28

30、电气网络综合:近期研究综述

电气网络综合:近期研究综述 1. 电气网络基础概念 1.1 驱动点行为 在一个或多个端口,端口对应着施加电压且有电流流过的一对端子。用 $\boldsymbol{i}$ 和 $\boldsymbol{v}$ 分别表示端口电流向量和相应的电压向量,那么网络的驱动点行为是形如以下微分方程的解集: $$ P…

作者头像 李华
网站建设 2026/7/7 16:29:40

38、多智能体系统二分共识与超奈奎斯特频率跟踪问题解析

多智能体系统二分共识与超奈奎斯特频率跟踪问题解析 多智能体系统二分共识问题 系统描述与基本定义 多智能体系统由 $N$ 个智能体组成,每个智能体的状态 $x_i(t)$($i \in [1, N]$)遵循一阶微分方程: $\dot{x} i(t) = Ax_i(t) + Bu_i(t)$ 其中,$x_i(t) \in R^n$,$u_…

作者头像 李华
网站建设 2026/7/7 14:26:14

1、掌握 Linux Shell 脚本编写基础

掌握 Linux Shell 脚本编写基础 1. 引言 在 Linux 系统中,脚本编写是一项强大的技能,它可以帮助我们自动化各种任务,提高工作效率。本文将深入探讨 Linux 脚本编写的基础知识,包括不同类型的 Linux 外壳、bash 脚本的概念、命令层次结构、文本编辑器的配置、脚本的创建与…

作者头像 李华
网站建设 2026/7/7 14:35:56

14、正则表达式与AWK日志处理全解析

正则表达式与AWK日志处理全解析 1. 定义基本正则表达式(BRE)模式 正则表达式(Regex)是用于匹配和处理文本的强大工具。在定义BRE模式时,我们可以使用以下命令: $ echo "Welcome to shell scripting" | sed -n /shell/p $ echo "Welcome to shell scri…

作者头像 李华
网站建设 2026/7/6 23:53:00

23、工业网络物理系统对交通和建筑行业的影响

工业网络物理系统对交通和建筑行业的影响 1. SUPERFLO系统在交通领域的应用 SUPERFLO 能够在出现扰动后调整维护和运营决策。这里的扰动指未预料到的事件,或者预料到的事件中出现的干扰。在列车车队中,这些干扰可能是替换零件交付的意外延迟、维修时间的错误估计以及意外故…

作者头像 李华