当前位置:   article > 正文

2024年HarmonyOS鸿蒙最全OpenHarmony开发实战:购物应用(ArkTS),2024年百度HarmonyOS鸿蒙面试真题_ofca-openharmony认证考卷20240604

ofca-openharmony认证考卷20240604

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

    }
    .tabBar("Lifestyle")
    .backgroundColor(Color.White)

    TabContent() {
      GoodsList({ goodsItems: this.goodsItems });
    }
    .tabBar("Deals")
    .backgroundColor(Color.White)
  }
  .barWidth(540)
  .barHeight(50)
  .scrollable(true)
  .barMode(BarMode.Scrollable)
  .backgroundColor('#007DFF')
  .height('100%')
}
.alignItems(HorizontalAlign.Start)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

}
}

 在GoodsHome中使用Tabs组件,在Tabs组件中设置4个TabContent,给每个TabContent设置tabBar属性,并设置TabContent容器中的内容GoodsList组件,GoodsList组件效果图如下:

  ![](https://img-blog.csdnimg.cn/img_convert/2a513ef8339a5bdaef175b53d474846d.png)

 代码如下:

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

@Component
struct GoodsList {
private goodsItems: GoodsData[]

build() {
Column() {
List() {
ForEach(this.goodsItems, item => {
ListItem() {
GoodsListItem({ goodsItem: item })
}
}, item => item.id.toString())
}
.height(‘100%’)
.width(‘100%’)
.align(Alignment.Top)
.margin({top: 5})
}
}
}

 在GoodsList组件中遍历商品数据集合,ListItem组件中设置组件内容,并使用Navigator组件给每个Item设置顶级跳转路由,GoodsListItem组件效果图如下:

  ![](https://img-blog.csdnimg.cn/img_convert/bfdd39b92f2449a10e76129f2b4cc3a7.png)

 代码如下:

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

@Component
struct GoodsListItem {
private goodsItem: GoodsData

build() {
Navigator({ target: ‘pages/ShoppingDetail’ }) {
Row() {
Column() {
Text(this.goodsItem.title)
.fontSize(18)
Text(this.goodsItem.content)
.fontSize(14)
Text(‘¥’ + this.goodsItem.price)
.fontSize(18)
.fontColor(Color.Red)
}
.height(130)
.width(‘60%’)
.margin({ left: 20 })
.alignItems(HorizontalAlign.Start)

    Image(this.goodsItem.imgSrc)
      .objectFit(ImageFit.ScaleDown)
      .height(130)
      .width('30%')
      .renderMode(ImageRenderMode.Original)
      .margin({ right: 10, left: 10 })

  }
  .backgroundColor(Color.White)

}
.params({ goodsData: this.goodsItem })
.margin({ right: 5 })
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

}
}

4. 在HomePage.ets中创建文件入口组件(Index)以及底部页签导航组件(Navigation),导入需要使用到的数据实体类以及需要使用的方法和组件,每个page文件都必须包含一个入口组件,使用@Entry修饰,HomePage文件中的入口组件(Index)代码如下:

 
  • 1
  • 2
  • 3

import { GoodsData, IconImage } from ‘…/model/GoodsData’
import { initializeOnStartup, getIconPath, getIconPathSelect } from ‘…/model/GoodsDataModels’
import { ShoppingCart } from ‘./ShoppingCartPage.ets’
import { MyInfo } from ‘./MyPage.ets’
import router from ‘@system.router’;

@Entry
@Component
struct Index {
@Provide currentPage: number = 1
private goodsItems: GoodsData[] = initializeOnStartup()
@State Build: Array = [
{
icon: $r(‘app.media.icon_home’),
icon_after: $r(‘app.media.icon_buy1’),
text: ‘首页’,
num: 0
},
{
icon: $r(‘app.media.icon_shopping_cart’),
icon_after: $r(‘app.media.icon_shopping_cart_select’),
text: ‘购物车’,
num: 1
},
{
icon: $r(‘app.media.icon_my’),
icon_after: $r(‘app.media.icon_my_select’),
text: ‘我的’,
num: 2
}
]

@Builder NavigationToolbar() {
Flex({direction:FlexDirection.Row,wrap:FlexWrap.NoWrap,justifyContent:FlexAlign.SpaceAround}) {
ForEach(this.Build, item => {
Column() {
Image(this.currentPage == item.num ? item.icon_after : item.icon)
.width(25)
.height(25)
Text(item.text)
.fontColor(this.currentPage == item.num ? “#ff7500” : “#000000”)
}
.onClick(() => {
this.currentPage = item.num
})
})
}
}

build() {
Column() {
Navigation() {
Flex() {
if (this.currentPage == 0) {
GoodsHome({ goodsItems: this.goodsItems })
}
if (this.currentPage == 1) {
ShoppingCart() //购物车列表
}
if (this.currentPage == 2) {
MyInfo() //我的
}
}
.width(‘100%’)
.height(‘100%’)
}
.toolBar(this.NavigationToolbar)
.title(“购物车”)
.hideTitleBar(this.currentPage == 1 ? false : true)
.hideBackButton(true)
}
}
}

 从入口组件的代码中可以看出,我们定义了一个全局变量currentPage ,当currentPage发生变化的时候,会显示不同的页签。在入口组件中,通initializeOnStartup获取商品列表数据(goodsItems)并传入GoodsHome组件中。效果图如下:

  ![](https://img-blog.csdnimg.cn/img_convert/8e058e1c268d9140c75ea97c960f92f0.png)


## 构建购物车页签



![](https://img-blog.csdnimg.cn/img_convert/52490009b30d414b3854b8422c0caadf.png)


从上面效果图可以看出,主界面购物车页签主要由下面三部分组成:


1. 顶部的title,由Navigation组件title属性设置。
2. 中间的List组件,其中List组件的item是一个水平的布局内包含一个toggle组件,一个Image组件和一个垂直布局,其item中的垂直布局是由2个Text组件组成。
3. 底部一个水平布局包含两个Text组件。


在本任务中我们主要是构建一个购物车页签,给商品列表的每个商品设置一个单选框,可以选中与取消选中,底部Total值也会随之增加或减少,点击Check Out时会触发弹窗。下面我们来完成ShoppingCart页签。


1. 在pages目录下面新建一个ETS Page ,命名为ShoppingCart.ets,config.json文件pages属性中也会自动添加“pages/ShoppingCart”页面路由。
2. 在ShoppingCartPage.ets文件中添加入口组件(ShoppingCart),并导入需要使用到的数据实体类、方法和组件。ShoppingCart组件代码如下:

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

import {GoodsData} from ‘…/model/GoodsData’
import {initializeOnStartup} from ‘…/model/GoodsDataModels’
import prompt from ‘@system.prompt’;

@Entry
@Component
export struct ShoppingCart {
@Provide totalPrice: number = 0
private goodsItems: GoodsData[] = initializeOnStartup()

build() {
Column() {
ShopCartList({ goodsItems: this.goodsItems });
ShopCartBottom()
}
.height(‘100%’)
.width(‘100%’)
.alignItems(HorizontalAlign.Start)
}
}

3. 新建ShopCartList组件用于存放购物车商品列表,ShopCartList组件效果图如下:

  ![](https://img-blog.csdnimg.cn/img_convert/d9cd7809ceb200ab4677493470098f9d.png)

 代码如下:

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

@Component
struct ShopCartList {
private goodsItems: GoodsData[]

build() {
Column() {
List() {
ForEach(this.goodsItems, item => {
ListItem() {
ShopCartListItem({ goodsItem: item })
}
}, item => item.id.toString())
}
.height(‘100%’)
.width(‘100%’)
.align(Alignment.Top)
.margin({ top: 5 })
}
.height(‘90%’)
}
}

 在ShopCartListItem中使用Toggle的单选框类型来实现每个item的选择和取消选择,在Toggle的onChage事件中来改变totalPrice的数值。ShopCartListItem组件效果图如下:

  ![](https://img-blog.csdnimg.cn/img_convert/41bc8c2f86849b280d5b21e9fe0bb765.png)

 代码如下:

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

@Component
struct ShopCartListItem {
@Consume totalPrice: number
private goodsItem: GoodsData

build() {
Row() {
Toggle({ type: ToggleType.Checkbox })
.width(13)
.height(13)
.onChange((isOn: boolean) => {
if (isOn) {
this.totalPrice += parseInt(this.goodsItem.price + ‘’, 0)
} else {
this.totalPrice -= parseInt(this.goodsItem.price + ‘’, 0)
}
})
Image(this.goodsItem.imgSrc)
.objectFit(ImageFit.ScaleDown)
.height(130)
.width(100)
.renderMode(ImageRenderMode.Original)
Column() {
Text(this.goodsItem.title)
.fontSize(18)
Text(‘¥’ + this.goodsItem.price)
.fontSize(18)
.fontColor(Color.Red)
}
.margin({left:40})
}
.height(100)
.width(‘100%’)
.margin({ left: 20 })
.alignItems(VerticalAlign.Center)
.backgroundColor(Color.White)
}
}

4. 新建ShopCartBottom组件,ShopCartBottom组件效果图如下:

  ![](https://img-blog.csdnimg.cn/img_convert/82353d74ad9c624931cb64ae90b9019d.png)

 代码如下:

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

@Component
struct ShopCartBottom {
@Consume totalPrice: number

build() {
Row() {
Text(‘Total: ¥’ + this.totalPrice)
.fontColor(Color.Red)
.fontSize(18)
.margin({ left: 20 })
.width(150)
Text(‘Check Out’)
.fontColor(Color.Black)
.fontSize(18)
.margin({ right: 20, left: 180 })
.onClick(() => {
prompt.showToast({
message: ‘Checking Out’,
duration: 10,
bottom: 100
})
})
}
.height(30)
.width(‘100%’)
.backgroundColor(‘#FF7FFFD4’)
.alignItems(VerticalAlign.Bottom)
}
}



## 构建我的页签



![](https://img-blog.csdnimg.cn/img_convert/7f02c4032092153c43fdc503ab99ea90.png)


从上面效果图可以看出,主界面我的页签主要由下面四部分组成:


1. 顶部的水平布局。
2. 顶部下面的文本加数字的水平List。
3. My Transactio模块,图片加文本的水平List。
4. More模块,图片加文本的Grid。


在本任务中,我们构建主页我的页签,主要可以划分成下面几步:


1. 在pages目录下面新建一个ETS Page 命名为MyPage.ets,在config.json文件pages属性中也会自动添加“pages/MyPage”页面路由。
2. 在MyPage.ets文件中添加入口组件(MyInfo),组件内容如下:

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

import {getMenu,getTrans,getMore} from ‘…/model/GoodsDataModels’
import {Menu, ImageItem} from ‘…/model/Menu’
@Entry
@Component
export struct MyInfo {
build() {
Column() {
Row() {
Image($r(‘app.media.icon_user’))
.objectFit(ImageFit.Contain)
.height(50)
.width(50)
.margin({left:10})
.renderMode(ImageRenderMode.Original)
Column() {
Text(‘John Doe’)
.fontSize(15)
Text(‘Member Name : John Doe >’)
.fontSize(15)
}
.height(60)
.margin({ left: 20, top: 10 })
.alignItems(HorizontalAlign.Start)
}

  TopList()
  MyTransList()
  MoreGrid()

}
.alignItems(HorizontalAlign.Start)
.width('100%')
.height('100%')
.flexGrow(1)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

}
}

 入口组件中还包含TopList,MyTransList和MoreGrid三个子组件。
3. 在MyPage.ets文件中新建TopList组件,效果图如下:

  ![](https://img-blog.csdnimg.cn/img_convert/6b784b57fa674a9d7f16fc54a91daecd.png)

 代码如下:

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

@Component
struct TopList {
private menus: Menu1[] = getMenu()

build() {
Row() {
List() {
ForEach(this.menus, item => {
ListItem() {
MenuItem({ menu: item })
}
}, item => item.id.toString())
}
.height(‘100%’)
.width(‘100%’)
.margin({ top: 5,left: 10})
.edgeEffect(EdgeEffect.None)
.listDirection(Axis.Horizontal)
}
.width(‘100%’)
.height(50)
}
}

 getMenu()方法在上文中已有定义,是获取菜单列表的方法,TopList的子组件MenuItem内容如下:

 
  • 1
  • 2
  • 3

@Component
struct MenuItem {
private menu: Menu1

build() {
Column() {
Text(this.menu.title)
.fontSize(15)
Text(this.menu.num + ‘’)
.fontSize(13)

}
.height(50)
.width(100)
.margin({ left: 8, right: 8 })
.alignItems(HorizontalAlign.Start)
.backgroundColor(Color.White)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

}
}

4. 在MyPage.ets文件中新建MyTransList组件和MoreGrid组件,MyTransList组件效果如如下:

  ![](https://img-blog.csdnimg.cn/img_convert/8b512dda8b4f4a7fa67b0af53c2ed863.png)

 代码如下:

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

@Component
struct MyTransList {
private imageItems: ImageItem[] = getTrans()

build() {
Column() {
Text(‘My Transaction’)
.fontSize(20)
.margin({ left: 10 })
.width(‘100%’)
.height(30)
Row() {
List() {
ForEach(this.imageItems, item => {
ListItem() {
DataItem({ imageItem: item })
}
}, item => item.id.toString())
}
.height(70)
.width(‘100%’)
.edgeEffect(EdgeEffect.None)
.margin({ top: 5 })
.padding({ left: 16, right: 16 })
.listDirection(Axis.Horizontal)
}
}
.height(120)
}
}

 MoreGrid组件效果图如下:

  ![](https://img-blog.csdnimg.cn/img_convert/5554b3a734c07e5d998541c8941500d7.png)

 代码如下:

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

@Component
struct MoreGrid {
private gridRowTemplate: string = ‘’
private imageItems: ImageItem[] = getMore()
private heightValue: number

aboutToAppear() {
var rows = Math.round(this.imageItems.length / 3);
this.gridRowTemplate = '1fr '.repeat(rows);
this.heightValue = rows * 75;
}

build() {
Column() {
Text(‘More’)
.fontSize(20)
.margin({ left: 10 })
.width(‘100%’)
.height(30)
Scroll() {
Grid() {
ForEach(this.imageItems, (item: ImageItem) => {
GridItem() {
DataItem({ imageItem: item })
}
}, (item: ImageItem) => item.id.toString())
}
.rowsTemplate(this.gridRowTemplate)
.columnsTemplate(‘1fr 1fr 1fr’)
.columnsGap(8)
.rowsGap(8)
.height(this.heightValue)
}
.padding({ left: 16, right: 16 })
}
.height(400)
}
}

 在MyTransList和MoreGrid组件中都包含子组件DataItem,为避免的重复代码,可以把多次要用到的结构体组件化,这里的结构体就是图片加上文本的上下结构体,DataItem组件内容如下:

 
  • 1
  • 2
  • 3

@Component
struct DataItem {
private imageItem: ImageItem

build() {
Column() {
Image(this.imageItem.imageSrc)
.objectFit(ImageFit.Contain)
.height(50)
.width(50)
.renderMode(ImageRenderMode.Original)
Text(this.imageItem.title)
.fontSize(15)

}
.height(70)
.width(150)
.margin({ left: 10, right: 10 })
.backgroundColor(Color.White)
  • 1
  • 2
  • 3
  • 4
  • 5

}
}



## 构建商品详情页面



![](https://img-blog.csdnimg.cn/img_convert/35243d8cf7d27a2adc95bf21a4afe290.png)


从上面效果图可以看出,商品详情页面主要由下面五部分组成:


1. 顶部的返回栏。
2. Swiper组件。
3. 中间多个Text组件组成的布局。
4. 参数列表。
5. 底部的Buy。


在本任务中,把上面每一部分都封装成一个组件,然后再放到入口组件内,当点击顶部返回图标时返回到主页面的商品列表页签,点击底部Buy时,会触发进度条弹窗


1. 在pages目录下面新建一个ETS Page, 命名为ShoppingDetail.ets,config.json文件pages属性中也会自动添加“pages/ShoppingDetail”页面路由。
2. 在ShoppingDetail.ets文件中创建入口组件,组件内容如下:

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

@Entry
@Component
struct ShoppingDetail {
private arsItems: ArsData[] = getArs()

build() {
Column() {
DetailTop()
Scroll() {
Column() {
SwiperTop()
DetailText()
DetailArsList({ arsItems: this.arsItems })
Image( r ( ′ a p p . m e d i a . c o m p u t e r 1 ′ ) ) . h e i g h t ( 220 ) . w i d t h ( ′ 100. m a r g i n ( t o p : 30 ) I m a g e ( r('app.media.computer1')) .height(220) .width('100%') .margin({ top: 30 }) Image( r(app.media.computer1)).height(220).width(100.margin(top:30)Image(r(‘app.media.computer2’))
.height(220)
.width(‘100%’)
.margin({ top: 30 })
Image( r ( ′ a p p . m e d i a . c o m p u t e r 3 ′ ) ) . h e i g h t ( 220 ) . w i d t h ( ′ 100. m a r g i n ( t o p : 30 ) I m a g e ( r('app.media.computer3')) .height(220) .width('100%') .margin({ top: 30 }) Image( r(app.media.computer3)).height(220).width(100.margin(top:30)Image(r(‘app.media.computer4’))
.height(220)
.width(‘100%’)
.margin({ top: 30 })
Image( r ( ′ a p p . m e d i a . c o m p u t e r 5 ′ ) ) . h e i g h t ( 220 ) . w i d t h ( ′ 100. m a r g i n ( t o p : 30 ) I m a g e ( r('app.media.computer5')) .height(220) .width('100%') .margin({ top: 30 }) Image( r(app.media.computer5)).height(220).width(100.margin(top:30)Image(r(‘app.media.computer6’))
.height(220)
.width(‘100%’)
.margin({ top: 30 })
}
.width(‘100%’)
.flexGrow(1)
}
.scrollable(ScrollDirection.Vertical)

  DetailBottom()
}
.height('90%')
.width('100%')
  • 1
  • 2
  • 3
  • 4

}
}

 其中顶部DetailTop组件效果图如下:

  ![](https://img-blog.csdnimg.cn/img_convert/2f6a322c04c7a11c51805670946a30d5.png)

 代码如下:

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

@Component
struct DetailTop {
build() {
Column() {
Row() {
Image($r(‘app.media.icon_return’))
.height(40)
.width(40)
.margin({left: 20})
.onClick(() => {
router.push({
uri: “pages/HomePage”
})
})

  }
  .width('100%')
  .height(35)
  .backgroundColor('#FF87CEEB')
}
.width('100%')
.height(40)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

}
}

3. SwiperTop组件效果图如下:

  ![](https://img-blog.csdnimg.cn/img_convert/75dc785031e0ed0a52b02331ce9dc489.png)

 代码如下:

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

@Component
struct SwiperTop {
build() {
Column() {
Swiper() {
Image( r ( ′ a p p . m e d i a . c o m p u t e r 1 ′ ) ) . h e i g h t ( 220 ) . w i d t h ( ′ 100 I m a g e ( r('app.media.computer1')) .height(220) .width('100%') Image( r(app.media.computer1)).height(220).width(100Image(r(‘app.media.computer2’))
.height(220)
.width(‘100%’)
Image( r ( ′ a p p . m e d i a . c o m p u t e r 3 ′ ) ) . h e i g h t ( 220 ) . w i d t h ( ′ 100 I m a g e ( r('app.media.computer3')) .height(220) .width('100%') Image( r(app.media.computer3)).height(220).width(100Image(r(‘app.media.computer4’))
.height(220)
.width(‘100%’)
Image( r ( ′ a p p . m e d i a . c o m p u t e r 5 ′ ) ) . h e i g h t ( 220 ) . w i d t h ( ′ 100 I m a g e ( r('app.media.computer5')) .height(220) .width('100%') Image( r(app.media.computer5)).height(220).width(100Image(r(‘app.media.computer6’))
.height(220)
.width(‘100%’)
}
.index(0)
.autoPlay(true)
.interval(3000)
.indicator(true)
.loop(true)
.height(250)
.width(‘100%’)
}
.height(250)
.width(‘100%’)
}
}

4. DetailText组件效果图如下:

  ![](https://img-blog.csdnimg.cn/img_convert/cb64cf117936a48dc91cb03847ab7367.png)

 代码如下:

 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

@Component
struct DetailText {
build() {
Column() {
Row() {
Image($r(‘app.media.icon_promotion’))
.objectFit(ImageFit.Contain)
.height(30)
.width(30)
.margin({ left: 10 })
Text(‘Special Offer: ¥9999’)
.fontColor(Color.White)
.fontSize(20)
.margin({ left: 10 })

  }
  .width('100%')
  .height(35)
  .backgroundColor(Color.Red)

  Column() {
    Text('New Arrival: HUAWEI MateBook X Pro 2021')
      .fontSize(18)
      .margin({ left: 10 })
      .alignSelf(ItemAlign.Start)
    Text('13.9-Inch, 11th Gen Intel® Core™ i7, 16 GB of Memory, 512 GB of Storage, Ultra-slim Business Laptop, 3K FullView Display, Multi-screen 
                      Collaboration, Emerald Green')
      .fontSize(14)
      .margin({ left: 10 })
    Row() {
      Image($r('app.media.icon_buy'))
        .objectFit(ImageFit.Contain)
        .height(30)
        .width(30)
        .margin({ left: 10 })
      Text('Limited offer')
        .fontSize(15)
        .fontColor(Color.Red)
        .margin({ left: 100 })

    }
    .backgroundColor(Color.Pink)
    .width('100%')
    .height(45)
    .margin({ top: 10 })

    Text(' Shipment:         2-day shipping')
      .fontSize(13)
      .fontColor(Color.Red)
      .margin({ left: 10, top: 5 })
      .alignSelf(ItemAlign.Start)
    Text('    Ship To:         Hubei,Wuhan,China')
      .fontSize(13)
      .fontColor(Color.Red)
      .margin({ left: 10, top: 5 })
      .alignSelf(ItemAlign.Start)
      .onClick(() => {
        prompt.showDialog({ title: 'select address', })

      })
    Text('Guarantee:         Genuine guaranteed')
      .fontSize(13)
      .margin({ left: 10, top: 5 })
      .alignSelf(ItemAlign.Start)
  }
  .height(170)
  .width('100%')
}
.height(180)
.width('100%')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55

}
}

 DetailArsList组件效果图如下:

  ![](https://img-blog.csdnimg.cn/img_convert/69a3e516facccdf4634e31518ab4f15c.png)

 代码如下:

 


**深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

![](https://img-blog.csdnimg.cn/direct/743b668910224b259a5ffe804fa6d0db.png)
![img](https://img-blog.csdnimg.cn/img_convert/806fb25bfc2b04ec2a8ff1045ad34509.png)
![img](https://img-blog.csdnimg.cn/img_convert/42106dec129e0742ad16a1b4a2907133.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618636735)**

  Text('Guarantee:         Genuine guaranteed')
          .fontSize(13)
          .margin({ left: 10, top: 5 })
          .alignSelf(ItemAlign.Start)
      }
      .height(170)
      .width('100%')
    }
    .height(180)
    .width('100%')
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

DetailArsList组件效果图如下:

代码如下:

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!


[外链图片转存中…(img-CeeqMX4U-1715616670831)]
[外链图片转存中…(img-0cTkBRJB-1715616670832)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/917074
推荐阅读
相关标签
  

闽ICP备14008679号