鸿蒙期末项目(3)

服务器搭建完成之后,编写了诸多api用于数据传输工作(略)

编写完成之后,回到鸿蒙开发工具,开始编写搜索页面的代码。

打开搜索页面时,先会展示历史搜索记录(如果有的话),然后会根据热门搜索向用户推荐搜索内容。当用户点击历史搜索或者热门搜索的标签或者手动输入搜索内容并点击搜索时,搜索提示将会消失,并展示搜索结果。

在编写的过程中遇到了一个问题:

@State search: boolean = false;
onSearch(textInput) {
    this.search = true;
}
​
build() {
    SearchCard({ onSearch: this.onSearch })
    
    if(!this.search) {
        ...
    }
}

将函数作为参数传递给子组件,子组件调用该函数并改变了响应式变量的值,但是却没有引起重绘。具体原因未知,但是可以将响应式变量使用@Link传入子组件中,在子组件中修改变量的值,这样就可以触发响应重绘。

搜索页面效果展示(数据仅为样例):

当用户搜索出来这些列表之后,点某个商店可以进入商店详情页并展示该商店所售卖的单品,而点某个单品可以进入商店并滚动到单品所在地。同时,数据库中还包含了单品所属类别,所以详情页可以按照类别来规划单品。

设计页面如下

遇到的问题

在父组件中定义函数,并将函数传给子组件,子组件调用函数时报错

错误原因:子组件调用函数时找不到函数中this所指的定义在父组件中的数据,所以在传递函数时需要用 .bind(this) 将this引用一同传递过去。

接下来来实现购物车界面,此界面参考美团购物车界面:

可以看到,同一家商店的商品会被归类到一个卡片中,每个商品前都有选择框,每个商店卡片头部也有选择框控制是否选择自家的所有商品,同时,在页脚处,有一个全局的选择框控制是否全选商品;当点击头部的编辑按钮时,页尾的结算按钮会变成删除按钮,删除所有选中的商品。

本人实现该界面的方法是:页首页脚单独编写两个组件Header、Footer来控制,随后通过算法分类出每个出现的商店和商品,通过ForEach渲染出相应的卡片组件StoreCard,在卡片中再次ForEach渲染出子组件ProductCard。然而考虑到还需要实现选择功能,所以使用@Observed修饰相关类后通过@ObjectLink传递给子组件。

中间遇到了一点小问题:

在这个卡片中,预想的效果应当是:

  • 当点击商店名旁边的选择框时,应当全选或全不全所有该商店的商品。

  • 当未点击商店名旁的选择框而是手动选择了全部商品,此时商店选择框应当自动被勾选

  • 当全选了商店的商品时,若手动取消了某个商品的选择,应当自动取消勾选商店的全选框

最初我为商店的全选按钮添加了 onChange 事件:

 .onChange((value) => {
     for (let index = 0; index < this.storeItem.child.length; index++) {
         this.storeItem.child[index].selected = value;
     }
 })

这样就可以实现点击全选后选择所有商品。但是当测试上述第三个功能时,子组件的改变引起了父组件单选框状态的改变,此时会触发这个 onChange 函数,取消一个商品的选择,导致所有不相关的商品一同被取消了选择。

解决方法是:将 onChange 改为 onClick 事件,原理很简单,只有当用户点击全选按钮时才会触发所有商品的全选/全不选方法,所以改为onClick可以避免程序修改selected 的值而触发事件。

最后编写个人主页见面,初步实现如下:

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

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

相关文章

爬取必应关键字搜索结果url

上代码 import aiohttp import asyncio from lxml import etree import aiofiles import time import random aiohttp 和 asyncio 用于异步HTTP请求和事件循环。 lxml 用于解析HTML。 aiofiles 用于异步文件操作。 time 和 random 用于控制爬取速度。 headers {User-Agent: M…

mysql安装创建数据库防止踩坑

为了安装MySQL的家人们走弯路&#xff0c;稍微有些啰嗦&#xff0c;讲述我安装的时遇到的问题&#xff0c;如何解决。仔细看看离成功不远。 mysql下载链接 MySQL :: Download MySQL Community Server windows下安装mysql-8.0.29-winx64&#xff0c;下载安装包后解压到文件夹中…

2024十大首码地推拉新app平台,一手首码对接平台!

到了2024年&#xff0c;地推新应用的接单平台成为创业者们关注的焦点。对于地推行业的从业人员而言&#xff0c;选择一家拥有一手单资源的平台至关重要&#xff0c;因为这直接关系到他们的利益。 2024年如果想要进行app地推活动&#xff0c;却没有人脉渠道的困扰&#xff0c;建…

谷歌网络营销中SEO的策略有哪些?

在网络营销中&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;是一种关键策略&#xff0c;旨在提高网站在搜索引擎结果中的排名。首先&#xff0c;要进行关键词研究&#xff0c;找出潜在客户使用的搜索词。接下来&#xff0c;优化网站内容&#xff0c;使其包含这些关键词&…

【Java Web】Ajax异步请求

目录 一、Ajax概述 二、Ajax执行原理 三、实现Ajax的请求 一、Ajax概述 传统情况下&#xff0c;浏览器与服务端的交互都是采用同步交互的方式进行的&#xff1b;此交互方式用户在向服务端发送请求后只有等到服务端的响应报文回来后用户才能在标签页上进行其它操作&#xff0c;即…

openlayer 鼠标点击船舶,打开船舶简单弹框

背景&#xff1a; 对创建的地图对象&#xff0c;可以添加上监听事件&#xff0c;常用的有&#xff1a;地图点击事件、鼠标移动事件。 通过监听这些事件&#xff0c;又可以区分不同图层的不同要素&#xff0c;获取不同数据&#xff1b; 根据这些数据&#xff0c;又可以发起网络请…

电脑的D盘E盘F盘突然消失了 电脑只剩下C盘了其他盘怎么恢复

现如今随着时代的发展&#xff0c;无纸化办公成为主流&#xff0c;这主要归功于电脑&#xff0c;能够通过电脑完成的工作绝不使用纸质文件&#xff0c;这不仅提高了工作效率&#xff0c;也让一些繁杂的工作变的更加简单。不过电脑毕竟是电子产品&#xff0c;不可避免的会出现一…

【包邮送书】深度学习与信号处理

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

win11家庭版没有gpedit解决

1、右键桌面&#xff0c;新建记事本&#xff0c;把后缀名txt修改成bat 2、输入以下命令&#xff1a; echo offdir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum >List.txtdir /b C:\Windows\servicing\Packages\Micr…

electron-builder创建桌面应用

一、利用vue-cli创建vue项目 创建electron方式有很多&#xff0c;这里说的是vuecli创建的项目&#xff0c;通过安装electron-builder插件创建 也可以通过electron-vite构建项目 &#xff1a; https://cn.electron-vite.org/guide/ vue-cli构建 vue create XXX项目名 //按提示操…

cad怎么导出为图片?分享四种导出方法

cad怎么导出为图片&#xff1f;在工程设计、建筑设计、机械设计等领域&#xff0c;CAD图纸的编辑和分享是一项日常工作。然而&#xff0c;如何将CAD图纸高效、准确地导出为图片格式&#xff0c;一直是设计师们关注的焦点。今天&#xff0c;就为大家推荐四款强大的CAD导出图片软…

Ubuntu 20.04安装显卡驱动、CUDA、Pytorch(2024.06最新)

文章目录 一、安装显卡驱动1.1 查看显卡型号1.2 根据显卡型号选择驱动1.3 获取下载链接1.4 查看下载的显卡驱动安装文件1.5 更新软件列表和安装必要软件、依赖1.6 卸载原有驱动1.7 禁用默认驱动1.8 安装lightdm显示管理器1.9 停止显示服务器1.10 在文本界面中&#xff0c;禁用X…

Java毕业设计 基于SSM vue药店管理系统小程序 微信小程序

Java毕业设计 基于SSM vue药店管理系统小程序 微信小程序 SSM 药店管理系统小程序 功能介绍 用户 登录 注册 首页 药品信息 药品详情 加入购物车 立即购买 收藏 购物车 立即下单 新增收货地址 我的收藏管理 用户充值 我的订单 留言板 管理员 登录 个人中心 修改密码 个人信息…

196.每日一题:检测大写字母(力扣)

代码解决 class Solution { public:bool detectCapitalUse(string word) {int capitalCount 0;int n word.size();// 统计大写字母的数量for (char c : word) {if (isupper(c)) {capitalCount;}}// 检查是否满足三种情况之一if (capitalCount n) {// 全部字母都是大写return…

查看LabVIEW及各个模块和驱动的版本号

要方便地查看当前计算机上安装的LabVIEW版本以及各个模块和驱动的版本号&#xff0c;可以使用以下几种方法&#xff1a; 1. 使用NI MAX (Measurement & Automation Explorer) NI MAX 是一个强大的工具&#xff0c;可以帮助你管理National Instruments硬件、软件和驱动程序…

软件测试面试被面试官问到:你会搭建测试环境吗?该怎么回答显得很有水平

一、你会搭建测试环境吗&#xff1f; 导语&#xff1a;很多人在面试软件测试的过程中&#xff0c;经常被问到“你会搭建测试环境吗”&#xff1f;面对这样的提问&#xff0c;你知道怎么回答么&#xff1f; 二、如何回答 面试的时候&#xff0c;遇到这样的提问&#xff0c;很多…

linux系统中vim ls grep等命令无法使用

linux突然vim ls grep等命令无法使用 系统配置路径被修改导致无法使用 添加路径 执行以下命令 export PATH$PATH:/root/bin export PATH$PATH:/usr/sbin

【Java Web】简单了解前端工程化

目录 一、什么是前端工程化? 二、前端工程化使用的技术栈 一、什么是前端工程化? 前端工程化是使用软件工程的方法来单独解决前端的开发流程中模块化、组件化、规范化、自动化的问题&#xff0c;其主要目的为了提高效率和降低成本。说白了就是将曾经同在一个工程中的前端和后…

智能化物业服务:楼层动态一目了然

通过图扑先进的可视化技术&#xff0c;实现对物业楼层的实时监控与高效管理。全面掌握楼层动态&#xff0c;优化资源配置&#xff0c;提升响应速度和服务质量&#xff0c;为业主提供智能化、便捷化的物业管理体验。

背部筋膜炎最有效的治疗方法

背部筋膜炎的引起原因可以归结为多个方面&#xff0c;以下是详细的分点表示和归纳&#xff1a; 1、慢性劳损&#xff1a;长时间使用背部&#xff0c;如经常按摩背部&#xff0c;会导致筋膜老化、发炎&#xff0c;进而引发背部筋膜炎。症状可能包括背部疼痛、痉挛、肌肉无力感等…