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

news2025/1/22 23:16:57

鸿蒙项目云捐助第十讲鸿蒙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索引位置上。

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

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

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

相关文章

数字IC后端零基础入门基础理论(Day1)

数字IC后端设计导入需要用到的input数据如下图所示。 数字后端零基础入门系列 | Innovus零基础LAB学习Day9 Netlist: 设计的Gate level(门级)网表。下图所示为一个计数器设计综合后的门级netlist。 从这个netlist中我们看到这个设计顶层的名字叫counte…

如何编译Opencv +ffmpeg linux 明明安装了ffmpeg但是opencv就是找不到

想要编译opencvffmpeg: 1.安装ffmpeg 随便位置(具体看ffmpeg 编译安装) 执行下面命令,其中/usr/local/ffmpeg/lib/pkgconfig是你实际的ffmpeg路径 export PKG_CONFIG_PATH$PKG_CONFIG_PATH:/usr/local/ffmpeg/lib/pkgconfig2.下载…

三维视频融合在数字孪生中的应用

一、在提升监控效率与决策准确性方面的应用 改善监控视角与理解:在数字孪生场景下,三维视频融合技术能够将监控视频与三维环境相结合。例如在城市安防、工业生产、大型活动等场景中,形成连续、实时、动态的三维全景拼接图。这解决了传统监控…

语音识别失败 chrome下获取浏览器录音功能,因为安全性问题,需要在localhost或127.0.0.1或https下才能获取权限

环境: Win10专业版 谷歌浏览器 版本 131.0.6778.140(正式版本) (64 位) 问题描述: 局域网web语音识别出现识别失败 chrome控制台出现下获取浏览器录音功能,因为安全性问题,需要在…

计算机网络-传输层 TCP协议(上)

目录 报头结构 TCP的可靠传输机制 核心机制一:确认应答 TCP的序号和确认序号 核心机制二:丢包重传 核心机制三:连接管理 建立连接-三次握手 断开连接-四次挥手 核心机制四:滑动窗口 数据包已经抵达, ACK被丢了 数据包就…

【Cadence射频仿真学习笔记】IC设计中电感的分析、建模与绘制(EMX电磁仿真,RFIC-GPT生成无源器件及与cadence的交互)

一、理论讲解 1. 电感设计的两个角度 电感的设计可以从两个角度考虑,一个是外部特性,一个是内部特性。外部特性就是把电感视为一个黑盒子,带有两个端子,如果带有抽头的电感就有三个端子,需要去考虑其电感值、Q值和自…

AutoSarOS中调度表的概念与源代码解析

--------AutoSarOS调度表的概念 一、AutoSarOS 是什么以及调度表的重要性 AutoSar(Automotive Open System Architecture)是汽车行业的一个开放式软件架构标准哦。它就像是一种大家都遵循的规则,能让不同的软件供应商一起合作开发汽车软件,这样软件就能被重复使用,开发效…

对golang的io型进程进行off-cpu分析

背景: 对于不能占满所有cpu核数的进程,进行on-cpu的分析是没有意义的,因为可能程序大部分时间都处在阻塞状态。 实验例子程序: 以centos8和golang1.23.3为例,测试下面的程序: pprof_netio.go package m…

VS项目,在生成的时候自动修改版本号

demo示例:https://gitee.com/chenheze90/L28_AutoVSversion 可通过下载demo运行即可。 原理:通过csproject项目文件中的Target标签,实现在项目编译之前对项目版本号进行修改,避免手动修改; 1.基础版 效果图如下 部…

springcloud-gateway获取应用响应信息乱码

客户端通过springcloud gateway跳转访问tongweb上的应用,接口响应信息乱码。使用postman直接访问tongweb上的应用,响应信息显示正常。 用户gateway中自定义了实现GlobalFilter的Filter类,在该类中获取了上游应用接口的响应信息,直…

node安装,npm安装,vue-cli安装以及element-ui配置项目

node.js Node.js主要用于开发高性能、高并发的网络服务器,特别适合构建HTTP服务器、实时交互应用(如聊天室)和RESTful API服务器等。‌它使用JavaScript语言,基于Chrome V8引擎,提供模块化开发和丰富的npm生态系统&…

新能源汽车充电需求攀升,智慧移动充电服务有哪些实际应用场景?

在新能源汽车行业迅猛发展的今天,智慧充电桩作为支持这一变革的关键基础设施,正在多个实际应用场景中发挥着重要作用。从公共停车场到高速公路服务区,从企业园区到住宅小区,智慧充电桩不仅提供了便捷的充电服务,还通过…

MCU驱动使用

一、时钟的配置: AG32 通常使用 HSE 外部晶体(范围:4M~16M)。 AG32 中不需要手动设置 PLL 时钟(时钟树由系统自动配置,无须用户关注)。用户只需在配置文件中给出外部晶振频率和系统主频即可。 …

简单的bytebuddy学习笔记

简单的bytebuddy学习笔记 此笔记对应b站bytebuddy学习视频进行整理,此为视频地址,此处为具体的练习代码地址 一、简介 ByteBuddy是基于ASM (ow2.io)实现的字节码操作类库。比起ASM,ByteBuddy的API更加简单易用。开发者无需了解class file …

2025erp系统开源免费进销存系统搭建教程/功能介绍/上线即可运营软件平台源码

系统介绍 基于ThinkPHP与LayUI构建的全方位进销存解决方案 本系统集成了采购、销售、零售、多仓库管理、财务管理等核心功能模块,旨在为企业提供一站式进销存管理体验。借助详尽的报表分析和灵活的设置选项,企业可实现精细化管理,提升运营效…

python 高级用法

1、推导列表 ans [ x for x in range(6)] print(ans)ans [ x for x in range(6) if x > 2] print(ans)ans [ x*y for x in range(6) if x > 2 for y in range(6) if y < 3] print(ans) 2、map 函数 a list(map(list,"abc")) print(a) b list(map(ch…

flask_socketio 以继承 Namespace方式实现一个网页聊天应用

点击进入上一篇&#xff0c;可作为参考 实验环境 python 用的是3.11.11 其他环境可以通过这种方式一键安装&#xff1a; pip install flask3.1.0 Flask-SocketIO5.4.1 gevent-websocket0.10.1 -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple pip list 详情如下&am…

Redis 7.x如何安装与配置?保姆级教程

大家好&#xff0c;我是袁庭新。最新写了一套最新版的Redis 7.x企业级开发教程&#xff0c;今天先给大家介绍下Redis 7.x如何在Linux系统上安装和配置。 1 Redis下载与安装 使用非关系型数据库Redis必须先进行安装配置并开启Redis服务&#xff0c;然后使用对应客户端连接使用…

如何编辑调试gradle,打印日志

在build.gradle.kts中输入 println("testxwg1 ") logger.lifecycle("testxwg2") logger.log(LogLevel.ERROR,"testxwg5") 点刷新就能看到打印日志了

electron-vite【实战系列教程】

创建项目 https://blog.csdn.net/weixin_41192489/article/details/144442262 安装必要的插件 UI 库 element-plus npm install element-plus --save安装 element-plus 图标 npm install element-plus/icons-vue安装插件 – 自动注册组件 vs 自动导入框架方法 npm install -…