Harmony开发笔记3

预览

Harmony开发和Compose类似,在组件上增加@Preview后则可以在预览面板上看到UI效果。

组件预览

我们新建一个组件,该组件仅展示一个文本内容。

@Component export struct HelloComponent { @State message: string = "This is component Text" build() { Row() { Text(this.message) .fontSize($r("app.float.font1")) } .backgroundColor($r("app.color.custom_bg")) .width("100%") .height("20%") } }

然后在文件中新建一个预览结构

@Preview @Entry @Component struct HelloPreview { build() { Row() { HelloComponent({ message: "这是预览" }) } } }

我们打开Previewer页签,可以看到预览效果

预览工具

预览工具有几个常用的选项如图:

  1. 切换不同设备,开发者可以在这里切换不同分辨率上显示效果

  2. 拖拽模式,这个和1中功能差不多,这里你可以拖拽手机快速切换分辨率

  1. 组件查看,开启Inspector后,我们可以清晰看到界面布局层级,点击对应层级预览中可以看到对应的组件。还可以看到该组件的全部属性信息。

在Attributes中可以修改对应属性来实时看到效果,并且你修改的属性后代码里也会同步增加对应属性,这个就很牛逼了!!!有个好处就是:我们如果不清楚具体设置属性方法,可以在这里修改对应值自动添加了代码
如上图,我修改了组件中Text的外边框颜色,增加了边框样式。

  1. 实时预览,打开实时预览后我们可以边写代码边看效果,这个是默认开启

数据模拟

有时候我们开发的页面是通过网络获取的数据,在预览时候就看不到数据,这时候我们可以使用Mock功能来模拟数据,替换网络获取数据的模块。

组件内模拟

我们可以在组件内通过@MockSetup注解来实现数据模拟,如下:

@Component export struct HelloComponent { @State message: string = "This is component Text" @MockSetup previewMessage() { this.message = "模拟文字" }

我们可以看到文本以显示为我们模拟的数据。我们还可以模拟方法,如下我们增加一个按钮点击调用toast传入字符串进行提示。
然后我们调用mock接口传入模拟的参数,点击后提示我们模拟的数据。

@Component export struct HelloComponent { @State message: string = "This is component Text" @MockSetup previewMessage() { this.message = "模拟文字" let mockFunction = new MockKit().mockFunc(this, this.testMsg) when(mockFunction)().afterReturn('这是模拟数据') } build() { Column() { Button() { Text("按钮") } .height('8%') .width('100%') .onClick(() => { promptAction.showToast({ message: this.testMsg() }) }) Row() { Text(this.message) .fontSize($r("app.float.font1")) .fontColor($r("app.color.font_color1")) .outlineColor(Color.Blue) .margin({ left: '10' }) .padding(12) .outlineStyle(OutlineStyle.DASHED) .outlineWidth($r("app.float.outline_width")) } .backgroundColor($r("app.color.custom_bg")) .width("100%") .height("20%") } } testMsg(): string { return '这是原始文本呢' } }

模块的模拟

模块的模拟主要针对我们网络请求的页面,模拟配置在entry/src/mock目录下,通过mock-config.json5配置替换原有的模块文件

例如我们有一个网络模块CommonsUtil,这里仅仅一个testA方法返回字符串。

export const testA = (): string => { return "This testA return text "; }

然后在mock下创建同名的mock文件模拟数据

const testA = (): string => { return "This testA Mock return text " }; export { testA }

最后我们在mock-config.json5中指定模拟的映射

{ "utils/CommonsUtil.ets": { "source": "src/mock/modules/utils/CommonsUtil.mock.ets" } }

在上面HelloComponent组件中在增加一个文本,文本内容来自CommonsUtiltestA

Row() { Text(testA()) Text(this.message) .fontSize($r("app.float.font1")) .fontColor($r("app.color.font_color1")) .outlineColor(Color.Blue) .margin({ left: '10' }) .padding(12) .outlineStyle(OutlineStyle.DASHED) .outlineWidth($r("app.float.outline_width")) } .backgroundColor($r("app.color.custom_bg")) .width("100%") .height("20%")

我们可以看到预览显示的是我们模拟的数据。

posted @   拜雨  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 本地部署 DeepSeek:小白也能轻松搞定!
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 从 Windows Forms 到微服务的经验教训
· 李飞飞的50美金比肩DeepSeek把CEO忽悠瘸了,倒霉的却是程序员
· 超详细,DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方Dee
点击右上角即可分享
微信分享提示