This content originally appeared on DEV Community and was authored by ShuGang Zhou
实现步骤:
准备 ForEach 遍历数据的页面
使用 http 获取数据渲染
落地代码:
准备 ForEach 遍历数据的页面
interface News {
id: number
title: string
source: string
cmtcount: number
img: string
time: string
}
@Entry
@Component
struct Index {
@State newsList: News[] = [{
"id": 1,
"title": "5G渗透率持续提升,创新业务快速成长",
"source": "新京报经济新闻",
"cmtcount": 58,
"img": "http://ajax-api.itheima.net/images/0.webp",
"time": "2222-10-28 11:50:28"
}]
build() {
List({ space: 10 }) {
ForEach(this.newsList, (news: News) => {
ListItem() {
Row({ space: 10 }) {
Column() {
Text(news.title)
.fontSize(16)
.textOverflow({ overflow: TextOverflow.Ellipsis })
.maxLines(3)
Row({ space: 10 }) {
Text(news.source)
.textExtend()
Text(`${news.cmtcount}评论`)
.textExtend()
Blank()
Text(news.time.split(' ')[0])
.textExtend()
}
.width('100%')
}
.justifyContent(FlexAlign.SpaceBetween)
.alignItems(HorizontalAlign.Start)
.height(80)
.layoutWeight(1)
Image(news.img)
.width(110)
.height(80)
.borderRadius(10)
}
.padding(10)
}
.backgroundColor(Color.White)
})
}
.padding(10)
.height('100%')
.width('100%')
.backgroundColor('#F0F0F0')
}
}
@Extend(Text)
function textExtend() {
.fontColor(Color.Gray)
.fontSize(12)
.textAlign(TextAlign.Start)
}
使用 http 获取数据渲染
interface NewsResponse {
message: string
data: News[]
}
aboutToAppear(): void {
this.getData()
}
async getData() {
const req = http.createHttp()
const res = await req.request('http://hmajax.itheima.net/api/news')
const result = JSON.parse(res.result.toString()) as NewsResponse
this.newsList = result.data
req.destroy()
}
This content originally appeared on DEV Community and was authored by ShuGang Zhou

ShuGang Zhou | Sciencx (2025-03-20T03:11:21+00:00) HarmonyOS NEXT 实战系列-综合案例新闻页. Retrieved from https://www.scien.cx/2025/03/20/harmonyos-next-%e5%ae%9e%e6%88%98%e7%b3%bb%e5%88%97-%e7%bb%bc%e5%90%88%e6%a1%88%e4%be%8b%e6%96%b0%e9%97%bb%e9%a1%b5/
Please log in to upload a file.
There are no updates yet.
Click the Upload button above to add an update.