鸿蒙项目云捐助第十讲鸿蒙App应用分类页面二级联动功能实现

鸿蒙项目云捐助第十讲鸿蒙App应用分类页面二级联动功能实现

在之前的教程中完成了分类页面的左右两侧的列表结构,如下图所示。

接下来需要实现左侧分类导航项的点击操作,可以友好的提示用户选择了哪一个文字分类导航项。

一、左侧文字分类导航的处理

点击左边的元素可以进行背景颜色的改变,相当于左侧每一个文字的导航项都有一个背景颜色与之对应。当点击左侧的导航项时,也需要修改对应导航项的背景颜色。这里可以把左侧的每一个文字导航项相当于一个子组件,每次点击后就是改变子组件的状态,这样每个子组件都有自己的状态位来控制背景颜色的变化。

这里处理方法是把NewSideBar组件中左侧的文字导航每一项提取出去,做法如下图所示。

把左侧导航的代码移植出去后,就变成一个新的组件SideBar,其代码如下图所示。

注意这里面引入了一个@Prop注解,这个注解的引入是为了接收父类变量的内容,由于把Text组件提取了出来形成子组件,但这个子组件需要显示捐赠商品的分类信息,这个信息在父组件中已经导入数据,父组件发生点击时也需要知道子组件的相关内容改变,这里就使用了@Prop注解,这个注解是单向传递的作用,也就是父组件可以通知子组件数据,子组件不需要对父组件的数据进行修改。

同时注意子组件中有自己的颜色变量mycolor,这个颜色变量mycolor控制自己的Text文字组件的backgroundColor背景颜色。根据用户点击的状态决定这个背景颜色是红色还是黄色。

这样在父类调用时,只需要调用子组件的名称,并把分类数据传入子组件即可。

现在实现思路是SideBar组件中点击一个Text文字项,该Text文字组件项背景色变成红色,点击另外一个Text文字项,另外的Text文字组件背景变成红色,而原来变红的背景颜色项恢复为黄色。这里引入控制变量的思路来解决这个问题,这个控制变量就相关于一个控制的开关,只有接通开关的文字组件项才是背景红色。思路如下图所示。

如图所示,主组件有一个变量开关,相当于控制每一个由黄变红的灯,开关打开就是红,开关关闭就是黄色。在主组件中设置一个变量,分析类型,第一个开关亮或者第二个开关亮,第一个第二个就是一个数值类型,希望得到数值number,才能指定是哪一个灯亮,也就是哪一个文字组件背景可以由黄变红。添加开关的代码如下图所示。

有了开关控制量,那么开开控制的数值如何得来,也就是Number类型值是1,2,3,4,这个1,2,3,4如何来的。结合到左侧文字组件的显示可以联想到编号的问题,相当于为左侧的所有文字组件添加一个编号。如下图所示。

这个编号恰好可以通过遍历时获取当前的循环索引值。因此ForEach循环代码可以改写为下图所示。

这里在ForEach的循环中加入index参数,它表示循环次数。

现在有两个量,一个量是总开关的控制量myswitc,这个开关量希望哪个值是红的需要对应每一个导航的编号 index,这样分类导航变变红的条件:myswtich的值和导航的编号值index相等就表示这个文本组件的分类导航项变红,这个变红的量控制的是子组件SideBar中的backgroundColor属性。子组件的backgroundColor属性变红变黄取决于这个开关量myswitch与每个文字组件循环的index相等与否,调用子组件的代码修改如下图所示。

接下来在子组件SideBar中接收这个控制量,在SideBar组件添加一个变量,SideBar就需要接收这个变量控制背景颜色的改变,这里可以进行单向传递,主控件的量告知子控件需要变色,但是不需要把信息回传给主控件。这里应该是@Prop。代码如下图所示。

子组件接收开关量control_switch后,这里backgroundColor的改变就通过control_swith来进行控制,代码如下图所示。

接下来当点击事件发生时,控制子组件变红的开关myswtich需要指向到对应的左侧文字导航组件编号,这里需要注意的是,一个元素定义成子组件后,子组件不能存在onClick的方法,只有子组件中的元素才会有onClick方法,这里就需要把父组件onClick方法给子组件去执行

onClick方法写在父组件方法,传给子组件,子组件去执行这个方法。在子组件中先定义一个onClickAction的事件,并进行空值的初始化。如下图所示。

子类完成onClickAction事件的定义后,在父类调用子组件里时需要将这个onClickAction作为参数传递进去。代码如下图所示。

这样处理的目的相当于子类调用了父类的方法,如下图所示。

这样就实现了左侧导航栏点击后可以进行某一个文本组件背景变红的效果。在实现这个功能时,需要注意的内容如下。

(1)   子类可以执行父类的方法,执行条件在子类中定义一个方法,方法初始化为空,在父类调用子组件时,把需要执行的代码传送到这个子组件中,方法名与子组件中调用方法名是一致的。
(2)   思维方式:主类中某个变量控制子组件的展示。

实现左侧导航的变色后,接下来进行右侧捐赠产品列表的滚动处理。

二、右侧捐赠商品列表的滚动处理

右侧的捐赠商品列表也可以效仿左侧分类导航的方法,先把ListItem中的内容变成组件,为了更好的按分类项目进行滚动,这里使用ListItemGroup就可以把右侧的捐赠商品列表按照分类进行分组,滚动的时候也可以按照分组的方式进行滚动。代码如下所示。

在使用ListItemGroup的时候,这里的header应用了一个Builder的组件复用方法实现的,具体实现方法如下图所示。

这里实现Builder函数的方法,效果在预览中有一个提示。如下图所示。

接下来就需要点击左侧的文字导航组件后,右侧就需要出现连锁反应。这里实现方式可以点击左边,使用右边的scroll控制器滑动指定的位置,控制在主类,这段代码在主类中。代码如下图所示。

这样就实现了点击左侧,右侧捐赠商品列表可以滚动,也可以调整到对应的index索引位置上。

后面持续完成我的及其它页面效果,请持续关注。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VSCode:Remote-SSH插件安装使用 -- 在VSCode中使用SSH

VSCode:Remote-SSH插件安装使用 1.安装Remote-SSH2.使用Remote-SSH 本文,将在Visual Studio Code中,安装Remote-SSH插件,实现SSH连接远程服务器。 1.安装Remote-SSH 打开VSCode,侧边栏中找到扩展模块(或CtrlShiftX快捷…

【机器人】Graspness 端到端 抓取点估计 | 论文解读

在复杂场景中实现抓取检测,Graspness是一种端到端的方法; 输入点云数据,输出抓取角度、抓取深度、夹具宽度等信息。 开源地址:GitHub - rhett-chen/graspness_implementation: My implementation of Graspnet Graspness. 论文地…

OpenWebUI,RAG+外部知识库+AI写文的开源应用

引言 自从去年AI火起来之后,很多人便热衷于寻找适合自用的AI开源项目,把各家大模型API接入到自己的AI程序里,便可以通过AI辅助完成一系列日常任务,比如内容翻译/润色/总结/撰写、格式转换、数据分类、代码分析、角色扮演等等。 …

力扣-图论-15【算法学习day.65】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非…

单元测试知识总结

我们希望每段代码都是自测试的,每次改动之后,都能自动发现对现有功能的影响。 1 测试要求 在对软件单元进行动态测试之前,应对软件单元的源代码进行静态测试; 应建立测试软件单元的环境,如数据准备、桩模块、模拟器…

基于AI对话生成剧情AVG游戏

游戏开发这个领域,一直有较高的学习门槛。作为一个非专业的游戏爱好者,如果想要开发游戏,往往受制于游戏引擎的专业程度,难以完成复杂的游戏项目。 AI IDE的诞生,提供了另外的一种思路,即通过AI 生成项目及…

kubeadm安装K8s高可用集群之集群初始化及master/node节点加入calico网络插件安装

系列文章目录 1.kubeadm安装K8s高可用集群之基础环境配置 2.kubeadm安装K8s集群之高可用组件keepalivednginx及kubeadm部署 3.kubeadm安装K8s高可用集群之集群初始化及master/node节点加入集群calico网络插件安装 kubeadm安装K8s高可用集群之集群初始化及master/node节点加入ca…

java后端环境配置

因为现在升学了,以前本来想毕业干java的,很多java的环境配置早就忘掉了(比如mysql maven jdk idea),想写个博客记录下来,以后方便自己快速搭建环境 JAVA后端开发配置 环境配置jdkideamavenMySQLnavicate17…

FPC补强板和软硬结合板有什么区别?

柔性印刷电路(Flexible Printed Circuit,简称FPC)在现代电子设备中有广泛应用,其设计和应用形式多种多样。在FPC的应用中,补强板和软硬结合板是两种常见的增强结构形式,它们在结构、功能和应用方面存在显著…

windows openssl编译x64版libssl.lib,编译x64版本libcurl.lib,支持https,vs2015编译器

不要纠结,直接选择用perl编译! 告诫想要用弄成vs编译版的,暂时先别给自己增加麻烦 告诫,以下执行的每一步,都不要纠结 先安装环境 nasm 64位版本 https://www.nasm.us/pub/nasm/releasebuilds/2.16.01/win64/nasm-…

【sizeof】各种数据类型所占空间大小

各种数据类型所占空间大小 文章目录 前言 一、sizeof是什么? 二、使用步骤 1.整型 2.字符型 总结 前言 ‌sizeof在C语言中是一个运算符,用于获取数据类型或变量在内存中所占的字节数。‌它可以在编译时计算数据类型或变量的内存大小,而…

gitlab仓库API操作

几年没接触gitlab了,新版本装完以后代码提交到默认的main分支,master不再是主分支 项目有几十个仓库,研发提交代码后仓库地址和之前的发生了变化 先修改Group的默认分支,不会影响已存在的项目 修改gitlab全局的默认分支 这就引…

Gitlab服务管理和仓库项目权限管理

Gitlab服务管理 gitlab-ctl start # 启动所有 gitlab 组件; gitlab-ctl stop # 停止所有 gitlab 组件; gitlab-ctl restart # 重启所有 gitlab 组件; gitlab-ctl status …

睡岗和玩手机数据集,4653张原始图,支持YOLO,VOC XML,COCO JSON格式的标注

睡岗和玩手机数据集,4653张原始图,支持YOLO,VOC XML,COCO JSON格式的标注 数据集分割 训练组70% 3257图片 有效集20% 931图片 测试集10% 465图片 预处理 没有采用任何预处…

vue响应式数据-修改对象的属性值,视图不更新

如图: 一:问题是: 我把数据处理后能console.log()打印出来,但是页面的内容不能同步的更新渲染; 二:要求: 在数组循环列表里面,我点击单个的item按钮时,需要实时加载进度…

HuLa——一款基于 Tauri+Vue3 构建的桌面即时通讯应用

文章目录 一、HuLa简介二、技术栈介绍三、安装运行四、界面体验五、开源地址 一、HuLa简介 HuLa 是一个基于 Tauri、Vite 5、Vue 3 和 TypeScript 构建的即时通讯系统。它利用了 Tauri 的跨平台能力和 Vue 3 的响应式设计,结合了 TypeScript 的类型安全特性和 Vite…

云计算HCIP-OpenStack03

书接上回: 云计算HCIP-OpenStack02-CSDN博客 10.KeyStone keystone-Openstack,IAM服务(统一身份认证)-云服务 建议先去了解Hadoop(大数据生态系统)中的kerberos(LDAPkerberos的鉴权机制&#xf…

【YOLO 项目实战】(10)YOLO8 环境配置与推理检测

欢迎关注『youcans动手学模型』系列 本专栏内容和资源同步到 GitHub/youcans 【YOLO 项目实战】(1)YOLO5 环境配置与检测 【YOLO 项目实战】(10)YOLO8 环境配置与推理检测 【YOLO5 项目实战】(10)YOLO8 环境…

Vue 3: 通过图片链接获取图片颜色,间接设置背景颜色

在现代Web开发中,动态获取和处理图像数据是一个常见的需求。例如,你可能希望自动提取一张图片的主色调,以便根据这些颜色进行UI主题调整或其他视觉效果的处理。本文将介绍如何在Vue 3项目中,通过一个图片链接获取图片的颜色信息。…

请确保 $(OutDir)、$(TargetName) 和 $(TargetExt) 属性值与 %(Link.OutputFile) 中指定的值匹配

vs版本升级时,编译时会出现上述问题,如原来在2017下编译的程序,后来改用2019,出现上述问题。需要在解决方案-通用属性-调试源文件下变更相应设置。