HarmonyOS鸿蒙Next中《仿盒马》app开发技术分享05-- 首页banner(端云一体)
HarmonyOS鸿蒙Next中《仿盒马》app开发技术分享05-- 首页banner(端云一体)
开发准备
上一篇文章中我们实现了项目端云一体化首页商品活动入口列表,现在我们还差一个banner的模块,banner模块不仅可以用于展示一些信息,还可以在点击之后进行,跳转,弹窗,升级提示,信息提示等作用,我们直接坐的完善一些,因为我们事先在banner表中添加了action,我们通过这个action的值来进行对应的处理,同时通过islogin字段来判断是否需要登陆操作。
代码实现
创建banner表
{
"objectTypeName": "home_banner",
"fields": [
{"fieldName": "id", "fieldType": "Integer", "notNull": true, "belongPrimaryKey": true},
{"fieldName": "banner_id", "fieldType": "Integer", "notNull": true, "defaultValue": 0},
{"fieldName": "url", "fieldType": "String"},
{"fieldName": "is_login", "fieldType": "Boolean"},
{"fieldName": "router", "fieldType": "Boolean"},
{"fieldName": "action_id", "fieldType": "Integer"},
{"fieldName": "action", "fieldType": "String"}
],
"indexes": [
{"indexName": "banner_id", "indexList": [{"fieldName":"banner_id","sortType":"ASC"}]}
],
"permissions": [
{"role": "World", "rights": ["Read"]},
{"role": "Authenticated", "rights": ["Read", "Upsert"]},
{"role": "Creator", "rights": ["Read", "Upsert", "Delete"]},
{"role": "Administrator", "rights": ["Read", "Upsert", "Delete"]}
]
}
填充数据
{
"cloudDBZoneName": "default",
"objectTypeName": "home_banner",
"objects": [
{
"id": 10,
"banner_id": 1,
"url": "https://su.bcebos.com/b2b-jiameng/online/clear_pic/2940613",
"is_login": true,
"router": "",
"action_id": 10,
"action": "toast"
},
{
"id": 20,
"banner_id": 0,
"url": "https://cdn.sputniknews.cn/img/101524/92/1015249261_0:158:3077:1889_1920x0_80_0_0_032381af16297b35660832ecbd2d7b42.jpg",
"is_login": false,
"router": "",
"action_id": 20,
"action": "dialog"
}
]
}
创建banner页面
import { HomeBanner } from "../entity/HomeBanner"
import showToast from "../utils/ToastUtils"
import { promptAction } from "@kit.ArkUI"
@Component
@Preview
export struct HomeBannerPage {
// 数据源
@Link bannerList:HomeBanner[]
// tabs 当前数据源的下标
@State swpIndex:number=1
build() {
Column() {
Swiper(){
ForEach(this.bannerList, (item: HomeBanner) => {
Image(item.url)
.width('100%')
.height(130)
.borderRadius(10)
.onClick(() =>{
if (item.is_login){
if (item.action=='toast') {
showToast(item.router)
}
if (item.action=='dialog') {
promptAction.showDialog({
title: '提示',
message: item.router,
buttons: [
{
text: '确认',
color: '#ffffff'
},
{
text: '关闭',
color: '#ffffff'
}
],
})
.then(data => {
console.info('showDialog success, click button: '+data.index);
})
.catch(err => {
console.info('showDialog error: '+err);
})
}
}
})
})
}
.borderRadius(10)
.loop(true)
.indicator(true)
.height(130)
.onChange((index: number) =>{
this.swpIndex=index+1
})
}
.padding(10)
.margin({top:10})
}
}
后续我们通过获取item的action来执行对应的逻辑即可。
更多关于HarmonyOS鸿蒙Next中《仿盒马》app开发技术分享05-- 首页banner(端云一体)的实战教程也可以访问 https://www.itying.com/category-93-b0.html
鸿蒙Next中实现首页banner的端云一体开发,需使用ArkUI框架结合云开发能力。通过云函数获取banner数据,返回JSON格式。前端使用Swiper组件展示轮播,绑定云数据库返回的数据源。布局采用Stack+Column组合,图片加载使用Image组件配合云存储URL。关键点在于云函数与前端的数据绑定,需在entry模块配置云开发依赖,在模块级build-profile.json5中声明所需云服务。交互逻辑通过@State管理当前页索引,监听Swiper切换事件更新状态。云数据库变化实时同步需订阅数据变更通知。
更多关于HarmonyOS鸿蒙Next中《仿盒马》app开发技术分享05-- 首页banner(端云一体)的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
从技术实现来看,这个banner模块的设计很完整,采用了端云一体化方案。几个关键点值得肯定:
- 数据库表设计合理,包含了banner核心字段:
- 图片url、登录校验is_login
- 交互动作action和action_id
- 索引优化了查询性能
- 前端组件实现规范:
- 使用Swiper实现轮播效果
- 通过ForEach动态渲染banner列表
- 点击事件根据action类型处理不同交互
- 交互逻辑完善:
- 支持toast提示和dialog弹窗
- 登录状态校验
- 循环播放和指示器功能
建议可以进一步完善:
- 图片加载增加placeholder和错误处理
- 添加自动轮播功能
- 考虑增加动画过渡效果
- 安全方面校验url合法性
整体实现符合HarmonyOS开发规范,云数据库和前端组件的结合体现了端云一体化优势。