纯血鸿蒙开发实战—如何开发出一个鸿蒙购物应用!

HarmonyOS 支持应用以 Ability 为单位进行部署,Ability 可以分为 FA(Feature Ability)和 PA(Particle Ability)两种类型。

本篇 Codelab 将会使用 UI 组件开发出一个 HarmonyOS 购物应用。

HarmonyOS 为开发者提供了多种组件,每个组件通过对数据和方法的简单封装,实现独立的可视、可交互功能单元。开发者只需要关注实现逻辑,减少开发量。

01最终效果预览

我们最终会构建一个简易的购物应用。应用包含两级页面,分别是主页(商品浏览页签、购物车页签、我的页签)和商品详情页面。

两个页面都展示了丰富的 HarmonyOS UI 组件,包括:

  • 自定义弹窗容器(dialog)

  • 列表(list)

  • 滑动容器(swiper)

  • 页签组件(tabs)

  • 按钮组件(button)

  • 图表组件(chart)

  • 分隔器组件(divider)

  • 图片组件(image)

  • 交互式组件(input)

  • 跑马灯组件(marquee)

  • 菜单组件(menu)

  • 滑动选择器组件(picker)

  • 进度条组件(progress)

  • 评分条组件(rating)

  • 搜索框组件(search)

商品浏览页面和商品详情页面如下图:

02搭建 HarmonyOS 环境

步骤如下:

  • 安装 DevEco Studio 和 Node.js,详情请参考下载和安装软件。

  • 设置 DevEco Studio 开发环境,DevEco Studio 开发环境需要依赖于网络环境,需要连接上网络才能确保工具的正常使用。

可以根据如下两种情况来配置开发环境:

  • 如果可以直接访问 Internet,只需进行下载 HarmonyOS SDK 操作。

  • 如果网络不能直接访问 Internet,需要通过代理服务器才可以访问,请参考配置开发环境。

参考链接:

下载与安装软件:https://developer.harmonyos.com/cn/docs/documentation/doc-guides/software_install-0000001053582415配置开发环境:https://developer.harmonyos.com/cn/docs/documentation/doc-guides/environment_config-0000001052902427

说明:如需要在手机中运行程序,则需要提前申请证书,如使用模拟器可忽略。

准备密钥和证书请求文件:

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ide_debug_device-0000001053822404

申请调试证书:

https://developer.huawei.com/consumer/cn/doc/distribution/app/agc-harmonyapp-debugharmonyapp

你可以通过如下两种方式完成本篇 Codelab:

  • 开启开发者模式的 HarmonyOS 真机。

  • DevEco Studio 中的手机模拟器(模拟器暂不支持分布式调试)。

03代码结构解读

本篇 Codelab 只对核心代码进行讲解,对于完整代码,我们会在 7 参考中提供下载方式。

接下来我们会用一小节来讲解整个工程的代码结构:

  • entry/src/main/js/default/common 文件夹存放一些公共的资源,比如图片。

  • entry/src/main/js/default/pages 文件夹存放 HarmonyOS JS 的页面,包含 css、hml、js 三类文件。

  • entry/src/main/config.json:配置文件。

04页面详细解析

接下来,我们就可以编写 css、hml、js 代码了。搜索框组件(search):用于提供用户搜索内容的输入区域,图片示例和代码如下:

<search hint="{{pageWord.searchKeyWord}}" value="{{pageWord.searchValue}}" focusable="true" @change="searchColumn" @submit="submitColumn"></search>

页面展示:

图片

tab页签容器(tabs),图片示例和代码如下:

  • <tabs>的子组件(tab-bar):用来展示 tab 的标签区。

  • <tabs>的子组件(tab-content):用来展示 tab 的内容区。

注:用户可通过左右滑动或点击不同 tab 标签区,来显示不同 tab 标签区的内容区。

<tabs class="tabs" index="0" vertical="false" onchange="change"> <tab-bar class="tab-bar" mode="fixed"> <text class="tab-text" for="{{ item in titileList}}">{{ item }} </text> </tab-bar> <tab-content class="tabcontent" scrollable="true"> <div class="item-content" for="{{ item in contentList}}"> <list class="todo-wraper"> <list-item for="{{lists}}"> <div class="margin10" @click="detailPage"> <div class="todo-total"> <text class="todo-title">{{$item.title}}</text> <text class="todo-content">{{$item.content}}</text> <text class="todo-price"> <span>¥</span> <span>{{$item.price}}</span> </text> </div> <div class="width30"> <image src="{{$item.imgSrc}}" class="container-home-image"></image> </div> </div> </list-item> </list> </div> </tab-content> 
</tabs>

不同标签页图标切换(点击应用的正下面的不同标签,页面会随之切换,被选中的页面图片变红),图片示例和代码如下:

<div class="container-bottom-div" @click="buy" @click="clickBuy"> <image src="{{icon.buys}}" class="container-bottom-div-image" @click="clickBuy"></image> <image src="{{icon.shoppingCarts}}" class="container-bottom-div-image" @click="clickShoppingCart"></image> <image src="{{icon.mys}}" class="container-bottom-div-image" @click="clickMy"></image> 
</div>

购物车页面:用户可以把选中的商品加入购物车,然后可以选中想要拍下的商品,进行结算,图片示例和代码如下:

<div class="top-comm flex-direction-column"> <div for="{{ latestList }}" class="flex-direction-column"> <div class="container-shopping-list"> <input type="checkbox" value="{{$item.price}}" @change="addShopping"></input> <image src="{{$item.imgSrc}}" class="container-shopping-list-image"></image> <div class="container-shopping-list-div"> <text class="container-shopping-list-div-text">{{$item.title}}</text> <text class="container-shopping-list-div-texts"> <span>{{$item.price}}</span><span>元</span> </text> </div> </div> <divider class="container-shopping-list-divider"></divider> </div> 
</div>

我的页面布局,图片示例和代码如下:

<div class="container-my-deals"> <text class="container-my-deals-text">{{pageWord.myDeals}}</text> <div class="container-my-deals-div"> <div class="container-my-deals-div-div" for="{{transaction}}"> <image src="{{$item.src}}" class="container-my-image"></image> <text class="container-my-text">{{$item.title}}{{$item.num}}</text> </div> </div> 
</div>

页面路由跳转:用户点击商品浏览页面的任意商品,页面会跳转到商品详情页面,图片示例和代码如下:

detailPage() { router.push({ uri: "pages/shoppingDetailsPage/shoppingDetailsPage" }) 
},

滑动容器(swiper):用户可以在 swiper 组件上进行滑动 左右切换图片,或者 3s 自动滑动一次,图片示例和代码如下:

<swiper class="swiper" id="swiper" index="0" autoplay="true" interval="3000" indicator="true" loop="true" digital="false"> <div class="swiperContent" for="{{ item in swiperList }}"> <image src="/common/computer/computer{{item}}.png"></image> </div> 
</swiper>

跑马灯组件(marquee):展示一段单行滚动的文字,图片示例和代码如下:

图片

图片

图片

<marquee id="customMarquee" class="customMarquee" scrollamount="{{scrollAmount}}" loop="{{loop}}" direction="{{marqueeDir}}" @bounce="onMarqueeBounce" @start="onMarqueeStart" @finish="onMarqueeFinish">         {{pageInfo.marqueeCustomData}} 
</marquee>
对样式进行动态双向绑定,可以修改"次日达"字体的颜色 ,图片示例和代码如下:

图片

图片

图片

<text class="content-column-size-mar" style="color : {{textColor}};" @click="changeColor">{{pageInfo.nextDayReach}}</text> export default { data: { textColor: '#FF3536', } 
}

省市级联选择器和日期选择器以及 dialog 自定义弹窗容器的实现,图片示例和代码如下。

点击选择会弹出 Dialog,页面会有时间选择器和省市级联选择器。用户在弹出的时间选择器上选择日期,点击确定,页面上的数据也会同时改变。省市级联选择器,同理。

<div class="dialog-div-select"> <div> <text class="dialog-div-select-text">{{pageInfo.selectRewardTime}}</text> <div class="dialog-div-select-picker"> <picker type="date" selected="{{ newDate }}" hours="24" value="{{ newDate }}" @change="changeDate" @cancel="cancelDate"></picker> </div> </div> <div> <text class="dialog-div-select-text">{{pageInfo.selectRewardCity}}</text> <div class="dialog-div-select-picker"> <picker type="multi-text" @columnchange="columnTextData" columns="3" range="{{cityList}}" value="{{selectCityList}}" @change="changeCity"></picker> </div> </div> 
</div>

评分弹框(rating),图片示例和代码如下:点击评分,会弹出带有评分弹框的 dialog 弹窗容器

<dialog id="ratingDialog" class="dialog-main" @cancel="cancelrRatingDialog"> <div class="dialog-div"> <div class="dialog-div-rating"> <text class="font-size22 font-weight600">{{pageInfo.softwareScore}}</text> <rating numstars="5" rating="{{ratingNum}}" @change="ratingChange"></rating> <text class="font-size22 font-weight600">{{pageInfo.ratingReason}}</text> <input type="text" placeholder="{{pageInfo.ratingPlaceholder}}" value="{{ratingReason}}" @change="ratingReasonChange"></input> <div class="dialog-divs-divider-div"> <text class="font-size22 color-deepskyblue" @click="confirmRatingInfo">{{pageInfo.confirm}}</text> <divider vertical="true" class="dialog-divider"></divider> <text class="font-size22 color-deepskyblue" @click="cancelrRatingDialog">{{pageInfo.cancel}}</text> </div> </div> </div> 
</dialog>

浏览量页面:chart 组件(曲线图可以实时动态更新数据),图片示例和代码如下: 

<stack class="chart-region"> <image class="chart-background" src="common/background.png"></image> <chart class="chart-data" type="line" ref="linechart" options="{{lineOps}}" datasets="{{lineData}}"></chart> 
</stack>

点击立即抢购会弹出一个含有进度条(progress)的弹框 ,图片示例和代码如下:

<progress class="min-progress" type="scale-ring" percent="{{progress.percent}}" secondarypercent="{{progress.secondarypercent}}"></progress>

说明:以上所以代码仅 demo 演示参考使用。

05回顾和总结

本篇 Codelab 我们介绍了应用的主页面和详情页,两个页面都展示了丰富的 HarmonyOS UI 组件如下图:

另外,我们还把常用的一些组件运用到到该应用里面,比如:

  • 常用的 chart 图表组件:用曲线动态展示不同时间段的浏览量。

  • rating 评分条组件:运用到给软件/该商品打分评价。

  • 选择器:省市级类选择器、时间选择器。

图片示例如下:

06恭喜你

目前你已经成功完成了 Codelab 并且学到了:

  • 如何使用 HarmonyOS UI 常用组件。

  • 如何实现各页面之间的跳转。

最后

如果你想成为一名鸿蒙开发者,以下这些资料将是十分优质且有价值,让你的鸿蒙开发之路事半功倍!相对于网上那些碎片化的知识内容,这份学习资料的知识点更加系统化,更容易理解和记忆。

内容包含了:【OpenHarmony多媒体技术、Stage模型、ArkUI多端部署、分布式应用开发、音频、视频、WebGL、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战】等技术知识点。

鸿蒙Next全套VIP学习资料←点击领取!(安全链接,放心点击

1.鸿蒙核心技术学习路线

2.大厂面试必问面试题

3.鸿蒙南向开发技术

 4.鸿蒙APP开发必备

 5.HarmonyOS Next 最新全套视频教程

 6.鸿蒙生态应用开发白皮书V2.0PDF

这份全套完整版的学习资料已经全部打包好,朋友们如果需要可以点击→鸿蒙Next全套VIP学习资料:免费领取(安全链接,放心点击

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

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

相关文章

TikTok广告投放攻略——广告类型详解

TikTok广告是品牌或创作者付费向特定目标受众展示的推广内容&#xff08;通常是全屏视频&#xff09;。TikTok 上的广告是一种社交媒体营销形式&#xff0c;通常旨在提高广告商的知名度或销售特定产品或服务。 就 TikTok广告投放而言&#xff0c;其组织层级分为三个层级&#x…

行心科技与研草堂携手,共绘医康养新生态的食疗养生蓝图

在健康产业蓬勃发展的当下&#xff0c;广州市行心信息科技有限公司&#xff08;以下简称“行心科技”&#xff09;与研草堂携手合作&#xff0c;共同亮相于2024年第34届健博会暨中国大健康产业文化节。现场&#xff0c;行心科技董事长林泳强、顾问王志文老师与研草堂的厂商齐聚…

vue3之拆若依--记实现后台管理首页(左侧菜单栏、头部信息区域...)

效果图 前期准备 启动若依在本地 启动若依后台,跑在自己本地: 这里对于如何下载若依相关的前后端代码请参考若依官网:RuoYi 若依官方网站 |后台管理系统|权限管理系统|快速开发框架|企业管理系统|开源框架|微服务框架|前后端分离框架|开源后台系统|RuoYi|RuoYi-Vue|RuoYi-…

【Java毕业设计】基于JavaWeb的在线购物网站的设计与实现

文章目录 摘 要ABSTRACT目 录1 概述1.1 研究背景及意义1.2 国内外研究现状1.3 拟研究内容1.4 系统开发技术1.4.1 vue技术1.4.2 B/S结构1.4.3 Spring Boot框架1.4.4 MySQL数据库1.4.5 MVC模式 2 系统需求分析2.1 可行性分析2.2 功能需求分析 3 系统设计3.1 功能结构设计3.2 系统…

怎么用PHP语言实现远程控制两路照明开关

怎么用PHP语言实现远程控制两路开关呢&#xff1f; 本文描述了使用PHP语言调用HTTP接口&#xff0c;实现控制两路开关&#xff0c;两路开关可控制两路照明、排风扇等电器。 可选用产品&#xff1a;可根据实际场景需求&#xff0c;选择对应的规格 序号设备名称厂商1智能WiFi墙…

git clone 文件名中文、有冒号等问题 fatal: repository ‘***/r/鏍″洯鏅烘収椋熷爞/.git/‘ not found

记录一个git问题&#xff0c;比较有意思&#xff0c;也比较难找。 背景 首先把代码拉下来&#xff0c;发现给我报错。 怀疑 刚开始以为是仓库地址变了&#xff0c;但是发现仓库地址并没有变过。 交流 然后寻找解决方案。因为同事也遇到过&#xff0c;同事交了我一招&…

【西瓜书】2.模型评估与选择

1.经验误差与过拟合 &#xff08;1&#xff09;错误率、精度 &#xff08;2&#xff09;误差&#xff1a;训练误差/经验误差、泛化误差 &#xff08;3&#xff09;过拟合、欠拟合 欠拟合好克服&#xff0c;过拟合无法彻底避免 2.三大任务——评估方法 泛化误差的评估方法&a…

STM32F103VE和STM32F407VE的引脚布局

STM32F103VE vs STM32F407VE 引脚对比表 引脚 STM32F103VE STM32F407VE 备注 1 VSS VSS 地 2 VDD VDD 电源 3 VSSA VSSA 模拟地 4 VDDA VDDA 模拟电源 5 OSC_IN OSC_IN 外部时钟输入 6 OSC_OUT OSC_OUT 外部时钟输出 7 NRST NRST 复位 8 PC13 (GPIO) PC13 (GPIO) GPIO 9 PC14 (…

如何永久擦除Android手机中的所有个人数据?

在这个数字化的时代&#xff0c;确保您的个人数据的安全和隐私至关重要。如果您计划出售或回收您的Android手机&#xff0c;了解如何正确擦除Android手机是至关重要的。本综合指南将引导您通过安全擦除Android手机的分步过程&#xff0c;以保护您的敏感信息。 手机是极其敏感的…

反转链表的三种方法--面试必考(图例超详细解析,小白一看就会!!!)

目录 一、前言 二、题目描述 三、解题方法 ⭐ 头插法 --- 创建新的链表 ⭐ 迭代法 --- 三指针 ⭐ 递归法 四、总结与提炼 五、共勉 一、前言 反转链表这道题&#xff0c;可以说是--链表专题--&#xff0c;最经典的一道题&#xff0c;也是在面试中频率最高的一道题目&…

编译 TMS320F2838x 项目

编译 tms320f28388 项目&#xff0c;并生成 hex 文件 介绍 C2000Ware 目录 archive 架构 boards 基于官方开发板的例子 device_support 官方驱动&#xff0c;建立工程重点要用到的东西&#xff08;基于寄存器变量访问&#xff09; docs 说明文档 driverlib 官方的驱动…

找好看的简历模板,就上这6个网站。

找好看的简历模板就上这6个网站&#xff0c;免费下载&#xff01; 1、菜鸟图库 个人简历模板|WORD文档模板免费下载 - 菜鸟图库 站内有超多办公类素材&#xff0c;PPT、world、excel模板都能找到&#xff0c;简历模板有非常详细的分类&#xff0c;风格类型也很多&#xff0c;想…

数据库MongoDB详解

文章目录 入门指南1. 安装 MongoDB2. 启动 MongoDB 服务3. 连接到 MongoDB4. 创建数据库和集合5. CRUD 操作6. 索引7. 备份与恢复 不同场景下的应用方式&#xff1a;应用案例展示 入门指南 MongoDB 是一个基于分布式文件存储的非关系型数据库&#xff08;NoSQL&#xff09;&am…

Linux “ 软件管理 “

软件管理 widows 安装 方法一&#xff1a; 双击exe安装包&#xff0c;就可以安装。 用exe安装的软件会破记录到注册表中。 注册会记录安装位置&#xff0c;软件名称。 方法二&#xff1a; 用绿色方式进行安装。 不用写到注册表中&#xff0c;因此无法在开始菜单里面查看和卸…

AppInventor2有没有删除后的撤销功能?

问&#xff1a;不小心删除了组件&#xff0c;能撤回吗&#xff1f; 答&#xff1a;界面&#xff08;组件&#xff09;设计界面&#xff0c;没有撤销功能。代码&#xff08;逻辑&#xff09;设计视图&#xff0c;可以使用 CtrlZ 撤销&#xff0c;CtrlY 反撤销。 界面设计没有撤…

AIGC绘画设计——midjourney有哪些好用的关键词?

midjourney有哪些高级关键词&#xff1f; 这一期继续分享一些高级的关键词&#xff0c; 我有一些案例也是从其他博主那学习来的&#xff0c; 但为了尽可能不出错&#xff0c;每个案例都是自己尝试了很多次后才拿出来的。 挑选了几个效果比较好&#xff0c;使用场景较高的类型…

Odoo:全球用户规模最大的免费开源ERP,使用前必须关注的事项

在数字经济时代&#xff0c;使用企业资源规划 (ERP) 工具管理业务是优化绩效和获得最佳结果的必要条件。 Odoo作为世界上最受欢迎的免费开源企业管理软件&#xff0c;已成功服务全球超过1200万以上的企业用户规模&#xff0c;开源智造作为Odoo亚太地区的金牌服务机构&#xff…

【Mybatis】INSERT INTO 遇到NULL怎么处理?

目录标题 背景-使用Mybatis手写批量插入Insert方法测试核心代码&#xff0c;author字段为null&#xff0c;插入条件怎么写&#xff1f; MybatisPlus解决方案自动填充字段 Mybatis解决方案if标签处理 问题&#xff1a;如果不在工程里面设置默认值&#xff1f;如何直接使用数据库…

26-unittest之装饰器(@classmethod)

unittest中的setUp可以在每个测试方法运行前执行&#xff0c;有效的减少了代码量。但有个弊端&#xff0c;比如打开浏览器操作&#xff0c;执行每个测试方法前都要重新打开一次&#xff0c;这样就会浪费很多时间。 是否可以只打开一次浏览器&#xff0c;执行完所有的测试方法后…

Springboot jar运行时,将jar内的文件拷贝到文件系统中

背景 因为执行需要&#xff0c;需要把jar内templates文件夹下的的文件夹及文件加压到宿主机器的某个路径下&#xff0c; 以便执行对应的脚本文件 PS: 通过类加载器等方式&#xff0c;直接getFile遍历文件&#xff0c;在idea中运行是没问题的&#xff0c;但是当打包成jar运行就会…