一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

harmony OS NEXT-評(píng)論功能小demo

程奕紅 ? 來源:jf_34770892 ? 作者:jf_34770892 ? 2025-04-27 17:38 ? 次閱讀

# 評(píng)論頁面小demo

## 效果展示

![img](https://i-blog.csdnimg.cn/img_convert/f574e0b18325ee466938a3cb70530209.gif)

## 1.拆解組件,分層搭建

我們將整個(gè)評(píng)論頁面拆解為三個(gè)組件,分別是頭部導(dǎo)航,評(píng)論項(xiàng),回復(fù)三個(gè)部分,然后統(tǒng)一在index界面導(dǎo)入

![image-20250304150652225](https://i-blog.csdnimg.cn/img_convert/2e234f0fe986014368d8d7f138577e6a.png)

## 2.頭部導(dǎo)航界面搭建

![image-20250304151026576](https://i-blog.csdnimg.cn/img_convert/c876aa04a505a3c3203c03984a2e1504.png)

```ts
@Preview
@Component
struct HmNavBar {
// 屬性:是可以被傳遞值進(jìn)行替換的
build() {
Stack({ alignContent: Alignment.Start }) {
Row() {
Image($r('sys.media.ohos_ic_compnent_titlebar_back'))
.width('100%')
.aspectRatio(1)
}.width(24)
.padding(4)
.borderRadius(12)
.backgroundColor('#f5f7f8')


Text('評(píng)論回復(fù)')//先設(shè)置占頁面的100% 然后在居中對(duì)齊
.width('100%')
.textAlign(TextAlign.Center)
}
.width('100%')
.padding(20)
}
}

export { HmNavBar }
```

* 上述UI界面搭建很簡(jiǎn)單,但要注意一點(diǎn)就是在有了返回按鈕的情況下如何讓評(píng)論回復(fù)在整行居中,我們可以采用Stack布局,或者是在右邊也放置一個(gè)寬度為24的容器

## 3.評(píng)論項(xiàng)搭建

![image-20250304151409576](https://i-blog.csdnimg.cn/img_convert/997aa72cb25725d19e970993c4ff2fcd.png)

```ts
@Preview
@Component
struct HmReplay {
build() {
Row({ space: 8 }) {
Image($r('app.media.Cover1'))
.width(60)
.borderRadius(30)
Column({ space: 5 }) {
Text('遇到困難睡大覺')
.fontSize(18)
.fontWeight(700)
Text('你已經(jīng)是一個(gè)成熟的評(píng)論了要學(xué)會(huì)自己打破零回復(fù)!')
.fontSize(18)

Row() {
Row() {
Text('10-21.IP 屬地安徽')
.fontColor('#ffcfcfcf')
}

Row({ space: 5 }) {
Image($r('app.media.love'))
.width(24)
.aspectRatio(1)
Text('100')
.fontColor('#ffcfcfcf')
}
}.width('100%')
.justifyContent(FlexAlign.SpaceBetween)
}.layoutWeight(1)
.alignItems(HorizontalAlign.Start)

}.width('100%')
.padding(20)
.height(120)
.alignItems(VerticalAlign.Top)

}
}

export { HmReplay }
```

## 4.評(píng)論列表搭建

### 4.1.1分割線+回復(fù) 部分

```ts
Row() {
Text('回復(fù) (7)')
}.padding(12)
.border({
width: {
top: 6
},
color: 'rgb(246,246,246)'
})
.width('100%')
```

### 4.1.2 評(píng)論列表

#### 1.導(dǎo)入對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)

```ts
@State commentList: ReplyItemModel[] = [
new ReplyItemModel({
id: 1,
avatar: 'https://picx.zhimg.com/027729d02bdf060e24973c3726fea9da_l.jpg?source=06d4cd63',
author: '偏執(zhí)狂-妄想家',
content: '更何況還分到一個(gè)摩洛哥[驚喜]',
time: '11-30',
area: '海南',
likeNum: 34,
likeFlag: false
}),
new ReplyItemModel({
id: 2,
avatar: 'https://pic1.zhimg.com/v2-5a3f5190369ae59c12bee33abfe0c5cc_xl.jpg?source=32738c0c',
author: 'William',
content: '當(dāng)年希臘可是把1:0發(fā)揮到極致了',
time: '11-29',
area: '北京',
likeNum: 58,
likeFlag: false
}),
new ReplyItemModel({
id: 3,
avatar: 'https://picx.zhimg.com/v2-e6f4605c16e4378572a96dad7eaaf2b0_l.jpg?source=06d4cd63',
author: 'Andy Garcia',
content: '歐洲杯其實(shí)16隊(duì)球隊(duì)打正賽已經(jīng)差不多,24隊(duì)打正賽意味著正賽階段在小組賽一樣有弱隊(duì)。',
time: '11-28',
area: '上海',
likeNum: 10,
likeFlag: false
}),
new ReplyItemModel({
id: 4,
avatar: 'https://picx.zhimg.com/v2-53e7cf84228e26f419d924c2bf8d5d70_l.jpg?source=06d4cd63',
author: '正宗好魚頭',
content: '確實(shí)眼紅啊,亞洲就沒這種球隊(duì),讓中國(guó)隊(duì)刷',
time: '11-27',
area: '香港',
likeNum: 139,
likeFlag: false
}),
new ReplyItemModel({
id: 5,
avatar: 'https://pic1.zhimg.com/v2-eeddfaae049df2a407ff37540894c8ce_l.jpg?source=06d4cd63',
author: '柱子哥',
content: '我是支持?jǐn)U大的,亞洲杯歐洲杯擴(kuò)到32隊(duì),世界杯擴(kuò)到64隊(duì)才是好的,世界上有超過200支隊(duì)伍,歐洲區(qū)55支隊(duì)伍,亞洲區(qū)47支隊(duì)伍,即使如此也就六成出現(xiàn)率',
time: '11-27',
area: '舊金山',
likeNum: 29,
likeFlag: false
}),
new ReplyItemModel({
id: 6,
avatar: 'https://picx.zhimg.com/v2-fab3da929232ae911e92bf8137d11f3a_l.jpg?source=06d4cd63',
author: '飛軒逸',
content: '禁止歐洲杯擴(kuò)軍之前,應(yīng)該先禁止世界杯擴(kuò)軍,或者至少把亞洲名額一半給歐洲。',
time: '11-26',
area: '里約',
likeNum: 100,
likeFlag: false
})
]
//先定義一個(gè)接口 然后可以使用接口轉(zhuǎn)換工具轉(zhuǎn)換成對(duì)應(yīng)的類
export interface ReplyItem {
avatar: ResourceStr // 頭像
author: string // 作者
id: number // 評(píng)論的id
content: string // 評(píng)論內(nèi)容
time: string // 發(fā)表時(shí)間
area: string // 地區(qū)
likeNum: number // 點(diǎn)贊數(shù)量
likeFlag: boolean | null // 當(dāng)前用戶是否點(diǎn)過贊
}

export class ReplyItemModel implements ReplyItem {
avatar: ResourceStr = ''
author: string = ''
id: number = 0
content: string = ''
time: string = ''
area: string = ''
likeNum: number = 0
likeFlag: boolean | null = null

constructor(model: ReplyItem) {
this.avatar = model.avatar
this.author = model.author
this.id = model.id
this.content = model.content
this.time = model.time
this.area = model.area
this.likeNum = model.likeNum
this.likeFlag = model.likeFlag
}
}

```

#### 4.搭建評(píng)論列表界面

```ts
List() {
ForEach(this.commentList, (item: ReplyItemModel) => {
ListItem() {
HmCommentItem({
commentInfo: item,
//但凡傳函數(shù)吧必須用箭頭函數(shù)包裹!
changeLike:(id:number)=>{
this.changeLike(id)
}
})
}

})
}.layoutWeight(1)
```

* 這里需要注意幾點(diǎn)

1. List里面必須放置`ListItem()`
2. 評(píng)論列表的高度可以給一個(gè)自適應(yīng),這樣可以讓列列表超出屏幕的高度時(shí)實(shí)現(xiàn)自適應(yīng)

## 5.點(diǎn)贊邏輯的實(shí)現(xiàn)

實(shí)現(xiàn)任務(wù):當(dāng)我們點(diǎn)擊愛心或者點(diǎn)贊的時(shí)候,點(diǎn)贊數(shù)量+1,愛心變位紅色,當(dāng)我們?cè)俅吸c(diǎn)擊,點(diǎn)贊由原來的點(diǎn)贊變?yōu)槿∠c(diǎn)贊,愛心的顏色變?yōu)榛疑?,點(diǎn)贊的數(shù)量-1

代碼層面分析:由于我們顯示的數(shù)據(jù)是由主界面?zhèn)鞯阶咏缑娴?,所以我們需要在父界面定義一個(gè)方法,傳遞到子面去,在子界面去調(diào)用這個(gè)方法,所以在子界面需要有一個(gè)接受的方法

### 5.1.1 子界面接收的方法

```ts
changeLike:(id:number)=>void = ()=> {

}
```

### 5.1.2 點(diǎn)贊業(yè)務(wù)邏輯的實(shí)現(xiàn)

```ts
//點(diǎn)贊邏輯處理
changeLike(id:number){
//遍歷數(shù)組 對(duì)commentlist數(shù)組中的每一個(gè)元素item進(jìn)行迭代
const index = this.commentList.findIndex(item =>item.id === id)
//分支處理主評(píng)論和回復(fù)評(píng)論點(diǎn)贊狀態(tài)
if(index < 0){//處理主評(píng)論
if(this.comment.likeFlag){//已經(jīng)點(diǎn)贊
this.comment.likeNum -- //點(diǎn)贊數(shù)量--
}else {//未點(diǎn)贊
//點(diǎn)贊數(shù)量++
this.comment.likeNum++
}

this.comment.likeFlag = !this.comment.likeFlag
}else{//處理回復(fù)評(píng)論 找到回復(fù)列表中的某一個(gè)子評(píng)論
//返回第一次匹配元素的數(shù)組索引(0~N)
if(this.commentList[index].likeFlag){
this.commentList[index].likeNum--
}else {
this.commentList[index].likeNum++
}
this.commentList[index].likeFlag = !this.commentList[index].likeFlag
//@State修飾的數(shù)據(jù)只能監(jiān)聽到第一層或者本身 需要new一下在使用
this.commentList[index] = new ReplyItemModel(this.commentList[index])
// this.commentList.splice(index,1,this.commentList[index])
}

```

### 5.1.3父界面進(jìn)行傳值

![image-20250304214822497](https://i-blog.csdnimg.cn/img_convert/c489e8cf379cd97b3b9545e9cf285bcb.png)

## 6.發(fā)布界面的搭建

### 6.1.1 發(fā)布的邏輯

```ts
publishComment(content:string){
this.commentList.unshift(new ReplyItemModel({
// id: Math.random()的作用是生成一個(gè)基于隨機(jī)數(shù)的臨時(shí)唯一標(biāo)識(shí),但需注意:
// 數(shù)值范圍: 0 ≤ N < 1 (浮點(diǎn)數(shù))
// 格式示例: 0.1234567890123456
// 非整型: 生成16位小數(shù)的浮點(diǎn)數(shù)
//id不能重復(fù)
id: Math.random(),
avatar: 'https://picx.zhimg.com/027729d02bdf060e24973c3726fea9da_l.jpg?source=06d4cd63',
author: '遇到困難睡大覺',
content: '山外青山樓外樓,不回消息我記仇',
time: '11-30',
area: '安徽',
likeNum: 0,
likeFlag: false
}))
}
```

### 6.1.2 發(fā)布界面

```ts
@Preview
@Component
struct replay {
content: string = ''
@Link
conmentsnum: number
publish: (content: string) => void = () => {

}

build() {
Row() {
TextInput({ placeholder: '請(qǐng)留下你的評(píng)論~', text: $$this.content })
.layoutWeight(1)
.onSubmit(() => {
this.publish(this.content)
this.content = ''
})
Button('發(fā)布')
.onClick(() => {

this.publish(this.content)
this.content = ''
this.conmentsnum++

})
}
.width('100%')
.padding(12)
}
}

export { replay }
```


審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Harmony
    +關(guān)注

    關(guān)注

    0

    文章

    63

    瀏覽量

    2853
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    harmony OS NEXT-雙向數(shù)據(jù)綁定MVVM以及$$語法糖介紹

    # 鴻蒙Harmony-雙向數(shù)據(jù)綁定MVVM以及$$語法糖介紹 ## 1.1 雙向數(shù)據(jù)綁定概念 在鴻蒙(HarmonyOS)應(yīng)用開發(fā)中,雙向數(shù)據(jù)改變(或雙向數(shù)據(jù)綁定)是一種讓數(shù)據(jù)·模型和UI組件之間
    的頭像 發(fā)表于 04-29 16:52 ?95次閱讀

    harmony OS NEXT-通過用戶首選項(xiàng)實(shí)現(xiàn)數(shù)據(jù)持久化

    # 鴻蒙通過用戶首選項(xiàng)實(shí)現(xiàn)數(shù)據(jù)持久化 ## 1.1 場(chǎng)景介紹 用戶首選項(xiàng)為應(yīng)用提供Key-Value鍵值型的數(shù)據(jù)處理能力,支持應(yīng)用持久化輕量級(jí)數(shù)據(jù),并對(duì)其修改和查詢。當(dāng)用戶希望有一個(gè)全局唯一存儲(chǔ)的地方,可以采用用戶首選項(xiàng)來進(jìn)行存儲(chǔ)。Preferences會(huì)將該數(shù)據(jù)緩存在內(nèi)存中,當(dāng)用戶讀取的時(shí)候,能夠快速從內(nèi)存中獲取數(shù)據(jù),當(dāng)需要持久化時(shí)可以使用flush接口將內(nèi)存中的數(shù)據(jù)寫入持久化文件中。Preferences會(huì)隨著存放的數(shù)據(jù)量越多而導(dǎo)致應(yīng)用占用的內(nèi)存越大,因此
    的頭像 發(fā)表于 04-29 16:38 ?102次閱讀

    harmony OS NEXT-Navagation基本用法

    # Navagation基本用法 > Navigation組件是路由導(dǎo)航的根視圖容器,一般作為Page頁面的根容器使用,其內(nèi)部默認(rèn)包含了標(biāo)題欄,內(nèi)容欄和公工具欄,其中內(nèi)容區(qū)默認(rèn)首頁顯示導(dǎo)航內(nèi)容(Navigation的子組件)或非首頁顯示(NavDestination的子組件),首頁和非首頁通過路由進(jìn)行切換 * 使用Navigation跳轉(zhuǎn)的組件不需要再使用Entry來修飾,普通組件即可 * Navigation是一個(gè)導(dǎo)航組件,API9和API11的使用官方推薦方式各不相同 ## 1. Navagation API9的用法-(Navigation-NavRouter-(其他組件+NavD
    的頭像 發(fā)表于 04-27 17:39 ?73次閱讀

    Google Cloud Next 2025大會(huì)亮點(diǎn)回顧

    我們?cè)?Next 25 大會(huì)上展現(xiàn)了企業(yè)采用 AI 的強(qiáng)勁動(dòng)能,并就已全面集成 AI 技術(shù)堆棧的各個(gè)層面推出一系列創(chuàng)新功能。
    的頭像 發(fā)表于 04-16 11:22 ?438次閱讀

    HarmonyOS Next V2 @Local 和@Param

    HarmonyOS Next V2 @Local 和@Param @Local 背景 @Local 是 harmony 應(yīng)用開發(fā)中的 v2 版本中 對(duì)標(biāo)**@State**的狀態(tài)管理修飾器,它解決了
    的頭像 發(fā)表于 04-02 18:27 ?205次閱讀
    HarmonyOS <b class='flag-5'>Next</b> V2 @Local 和@Param

    harmony OS NEXT-基本介紹及DevcoStudiop基本使用

    #鴻蒙基本介紹及DevcoStudiop基本使用 1.認(rèn)識(shí)DevcoStudiop工作區(qū) 1.1認(rèn)識(shí)工作區(qū) 開發(fā)節(jié)奏: 通過左側(cè)目錄找到對(duì)應(yīng)的應(yīng)用文件,在編輯區(qū)進(jìn)行代碼編寫,在右側(cè)看預(yù)覽效果 快捷鍵:連按兩下shift快速尋找全局內(nèi)容,如文件 1.2如何排錯(cuò) 寫代碼時(shí),我們經(jīng)常會(huì)遇到這種情況,右側(cè)出現(xiàn)不能開啟預(yù)覽器的提示,我們需要打開預(yù)覽器日志查看報(bào)錯(cuò) 第一種方法 第二種方法 第三種方法:通過統(tǒng)一構(gòu)建,暴露哪些文件及代碼無法編譯通過 1.3如何刷新看效果 預(yù)覽器是有熱
    的頭像 發(fā)表于 03-26 16:48 ?255次閱讀
    <b class='flag-5'>harmony</b> <b class='flag-5'>OS</b> <b class='flag-5'>NEXT-</b>基本介紹及DevcoStudiop基本使用

    HarmonyOS NEXT 原生應(yīng)用開發(fā):社交聊天對(duì)話過程實(shí)現(xiàn)

    一、實(shí)現(xiàn)思路 本DEMO旨在展示如何在HarmonyOS NEXT平臺(tái)上,利用ArkTS開發(fā)語言構(gòu)建一個(gè)簡(jiǎn)易的社交聊天對(duì)話界面。用戶可以在此界面上查看聊天記錄,并發(fā)送新的消息。此示例中,聊天記錄
    發(fā)表于 01-07 10:55

    HarmonyOS NEXT 應(yīng)用開發(fā)練習(xí):AI智能對(duì)話框

    一、練習(xí)內(nèi)容 在這個(gè)HarmonyOS NEXT原生應(yīng)用DEMO中,我們將使用ArkTS開發(fā)語言創(chuàng)建一個(gè)功能更為豐富的AI智能對(duì)話框。這個(gè)對(duì)話框不僅具備基本的聊天功能,還能展示圖片消息
    發(fā)表于 01-03 11:29

    HarmonyOS NEXT 應(yīng)用開發(fā)練習(xí):智能視頻推薦

    一、整體思路 本DEMO展示了如何在HarmonyOS NEXT平臺(tái)上開發(fā)一個(gè)智能視頻推薦應(yīng)用。應(yīng)用通過模擬的用戶偏好數(shù)據(jù),為用戶推薦可能感興趣的視頻。用戶可以通過滑動(dòng)屏幕查看推薦的視頻列表,并點(diǎn)擊
    發(fā)表于 01-02 16:26

    不適用ADS8586S的過采樣功能,OS0,OS1,OS2這三個(gè)引腳該如何接?

    請(qǐng)問如果我不適用ADS8586S的過采樣功能OS0,OS1,OS2這三個(gè)引腳該如何接,busy與FRSTDATA引腳貌似是指示信號(hào),一般可以懸空嗎?不使用這兩個(gè)引腳會(huì)不會(huì)影響芯片的
    發(fā)表于 12-19 06:48

    峰岹demo板配套資料匯總

    √ √ √ FU6866Q1-FOC-DZ √ √ √ FU6866Q1-汽車電子_DEMO_M1 √ √ √ FU6881Q1-DEMO √ √ √ 疑問與需求: 如您對(duì)使用過程有任何疑問或需求,歡迎在下方評(píng)論區(qū)留言,我們將
    發(fā)表于 09-25 18:04

    OpenAI宣布啟動(dòng)GPT Next計(jì)劃

     9月4日最新資訊,OpenAI Japan 在KDDI峰會(huì)上亮相,揭開了其即將問世的下一代AI模型的神秘面紗,并正式宣布了旨在2024年啟動(dòng)的GPT Next宏偉計(jì)劃。
    的頭像 發(fā)表于 09-04 14:51 ?803次閱讀

    華為發(fā)布鴻蒙原生智能,OS深度融合AI,小藝升級(jí)為系統(tǒng)級(jí)智能體

    6月21日,華為開發(fā)者大會(huì)(HDC 2024)于東莞松山湖舉行,會(huì)上,華為發(fā)布鴻蒙原生智能(Harmony Intelligence),并宣布HarmonyOS NEXT面向開發(fā)者和先鋒用戶開放
    的頭像 發(fā)表于 06-24 14:30 ?909次閱讀
    華為發(fā)布鴻蒙原生智能,<b class='flag-5'>OS</b>深度融合AI,小藝升級(jí)為系統(tǒng)級(jí)智能體

    HDC2024華為發(fā)布鴻蒙原生智能:AI與OS深度融合,開啟全新的AI時(shí)代

    6月21日,華為開發(fā)者大會(huì)2024(HDC.2024)召開。 HarmonyOS NEXT將AI與OS深度融合,構(gòu)筑全新鴻蒙原生智能框架。大會(huì)現(xiàn)場(chǎng),華為常務(wù)董事、終端BG董事長(zhǎng)、智能汽車解決方案BU
    的頭像 發(fā)表于 06-24 09:28 ?969次閱讀
    HDC2024華為發(fā)布鴻蒙原生智能:AI與<b class='flag-5'>OS</b>深度融合,開啟全新的AI時(shí)代

    Flutter首次亮相Google Cloud Next大會(huì)

    Flutter 團(tuán)隊(duì)在近期首次參加了 Google Cloud Next 大會(huì),這意味著 Flutter 在開發(fā)社區(qū)中的影響力正在日益增長(zhǎng)。
    的頭像 發(fā)表于 05-09 10:15 ?651次閱讀