0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

鸿蒙之HML语法参考

王程 来源:jf_75796907 作者:jf_75796907 2024-02-20 15:53 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

HML(HarmonyOS Markup Language)是一套类HTML的标记语言,通过组件,事件构建出页面的内容。页面具备数据绑定、事件绑定、条件渲染和逻辑控制等高级能力。

页面结构

< !-- xxx.hml -- >

< text class="item-title" >Image Show< /text >

< image src="/common/xxx.png" class="image" >< /image >

数据绑定

< !-- xxx.hml -- >

< text >{{content}}< /text > < !-- 输出:Hello World!-- > < text >{{key1}} {{key2}}< /text > < !-- 输出:Hello World-- > < text >key1 {{key1}}< /text > < !-- 输出:key1 Hello-- > < text >{{flag1 && flag2}}< /text > < !-- 输出:false-- > < text >{{flag1 || flag2}}< /text > < !-- 输出:true-- > < text >{{!flag1}}< /text > < !-- 输出:false-- >

卡片hml文件中的变量需要在json文件的data字段下进行声明:

{
  "data": {
    "content": "Hello World!",
    "key1": "Hello",
    "key2": "World",
    "flag1": true,
    "flag2": false
  }
}

说明

key值支持对象操作符和数组操作符,如{{key.value}}、{{key[0]}}。

支持字符串拼接、逻辑运算和三元表达式。

字符串拼接:

支持变量跟变量:{{key1}}{{key2}}等

支持常量跟变量: “my name is {{name}}, i am from
{{city}}.” “key1 {{key1}}”

逻辑运算:

与:{{flag1 && flag2}}(仅支持两个boolean变量间的与逻辑运算)

或:{{flag1 || flag2}}
(仅支持两个boolean变量间的或逻辑运算)

非:{{!flag1}} (仅支持boolean变量的非逻辑运算)

三元表达式

{{flag? key1:key2}}(flag为boolean变量,key1和key2可以是变量,也可以是常量)

注意事项

非boolean类型值进行bool运算默认为false

以上所有变量解析跟运算解析均不支持嵌套

事件绑定

卡片的事件需要在json文件的actions字段下进行声明。卡片仅支持click通用事件,事件的定义只能是直接命令式,事件定义必须包含action字段,用以说明事件类型。卡片支持两种事件类型:跳转事件(router)和消息事件(message)。跳转事件可以跳转到卡片提供方的HarmonyOS应用,消息事件可以将开发者自定义信息传递给卡片提供方。事件参数支持变量,变量以"{{}}"修饰。跳转事件中若定义了params字段,则在被拉起应用的onStart的intent中,可用"params"作为key将跳转事件定义的params字段的值取到。

跳转事件格式

通过定义ability名称和携带的参数字段params直接跳转,可用"params"作为key提取到跳转事件定义的params字段值。

选择器 样例 默认值 样例描述
action string “router” 事件类型。- “router”:用于应用跳转。- “message”:自定义点击事件。
abilityName string - 跳转ability名。
params Object - 跳转应用携带的额外参数。

{
  "data": {
    "mainAbility": "xxx.xxx.xxx"
  },
  "actions": {
    "routerEvent": { 
      "action": "router",
      "abilityName": "{{mainAbility}}",
      "params":{}
    } 
  }
}

消息事件格式

选择器 样例 默认值 样例描述
action string message 表示事件类型。
params Object - 跳转应用携带的额外参数。

{
  "actions": {
    "activeEvent": { 
      "action": "message",
      "params": {}           
    } 
  }
}

绑定路由事件和消息事件

< !-- xxx.hml -- > 

< !-- 正常格式 -- >

< !-- 缩写 -- >

列表渲染

< !-- xxx.hml -- >

< !-- div列表渲染 -- > < !-- 默认$item代表数组中的元素, $idx代表数组中的元素索引 -- >

< text >{{$item.name}}< /text >

< !-- 自定义元素变量名称 -- >

< text >{{value.name}}< /text >

< !-- 自定义元素变量、索引名称 -- >

< text >{{value.name}}< /text >

{
  "data": {
    "array": [
      {"id": 1, "name": "jack", "age": 18},
      {"id": 2, "name": "tony", "age": 18}
    ]
  }
}

tid属性主要用来加速for循环的重渲染,旨在列表中的数据有变更时,提高重新渲染的效率。tid属性是用来指定数组中每个元素的唯一标识,如果未指定,数组中每个元素的索引为该元素的唯一id。例如上述tid="id"表示数组中的每个元素的id属性为该元素的唯一标识。for循环支持的写法如下:

for=“array”:其中array为数组对象,array的元素变量默认为$item。

for=“v in array”:其中v为自定义的元素变量,元素索引默认为$idx。

for=“(i, v) in array”:其中元素索引为i,元素变量为v,遍历数组对象array。

说明

数组中的每个元素必须存在tid指定的数据属性,否则运行时可能会导致异常。

数组中被tid指定的属性要保证唯一性,如果不是则会造成性能损耗。比如,示例中只有id和name可以作为tid字段,因为它们属于唯一字段。

tid不支持表达式。

不支持for嵌套使用。

for对应的变量数组,当前要求数组中的object是相同类型,不支持多种object类型混合写在一个数组中

条件渲染

条件渲染分为2种:if/elif/else和show。

当使用if/elif/else写法时,节点必须是兄弟节点,否则编译无法通过。实例如下:

< !-- xxx.hml -- >

< text if="{{show}}" > Hello-TV < /text > < text elif="{{display}}" > Hello-Wearable < /text > < text else > Hello-World < /text >

{
  "data": {
    "show": false,
    "display": true
  }
}

当show为真时,节点正常渲染;当show为假时,节点不渲染,效果等同display样式为none。

< !-- xxx.hml -- >
< text show="{{visible}}" > Hello World < /text >
{
  "data": {
    "visible": false
  }
}

逻辑控制块

控制块使得循环渲染和条件渲染变得更加灵活;block在构建时不会被当作真实的节点编译。block标签只支持if属性。

< !-- xxx.hml -- > 

< text >Hello< /text > < text >World< /text > < /block >

{ 
  "data": { 
    "show": true
  } 
}

Markdown 3634 字数 238 行数 当前行 3, 当前列 0

HTML 3362 字数 179 段落

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 语法
    +关注

    关注

    0

    文章

    44

    浏览量

    10483
  • 鸿蒙
    +关注

    关注

    60

    文章

    2856

    浏览量

    45340
  • HarmonyOS
    +关注

    关注

    80

    文章

    2146

    浏览量

    35539
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    想体验鸿蒙生态,该怎么获取鸿蒙开发板?有哪些途径?

    如何快速上手体验鸿蒙生态? 想体验鸿蒙生态,该怎么获取鸿蒙开发板?有哪些途径?
    发表于 11-29 08:40

    如何申请鸿蒙开发板?想体验鸿蒙生态。

    如何申请鸿蒙开发板?想体验鸿蒙生态。
    发表于 11-29 08:34

    Vishay / Techno HML微型厚膜电阻器数据手册

    Vishay/Techno HML微型厚膜电阻器采用坚固的塑料外壳,采用无感设计,尺寸仅为0.073“x0.036”。这些工业级微型电阻器在镍引线上采用100%纯锡焊料涂层和高纯度96%氧化铝基板
    的头像 发表于 11-13 11:03 229次阅读
    Vishay / Techno <b class='flag-5'>HML</b>微型厚膜电阻器数据手册

    语法纠错和testbench的自动生成

    在编写Verilog代码时,我一般都是先在编辑器上写完,因为编辑器vscode或者notepad++可以提供语法高亮和自动补全等功能,然后用仿真器跑仿真,但是在编写过程中不可避免的会有一些语法的错误
    发表于 10-27 07:07

    开源鸿蒙6.0 Release版本重磅发布

    近日,在长沙国际会议中心举办的开源鸿蒙技术大会2025上,开放原子开源鸿蒙(即OpenAtom OpenHarmony,简称“开源鸿蒙”)项目群正式发布开源鸿蒙6.0 Release版
    的头像 发表于 10-10 16:49 2172次阅读

    开鸿智谷:做开源鸿蒙的“引领者”,在湘江畔筑造万物智联新基石

    鸿蒙生态的战略版图上,长沙正成为一个愈发重要的坐标。今年9月15日,鸿蒙生态(长沙)创新中心正式启用,湖南省委书记沈晓明、省长毛伟明亲自出席,宣告了湖南拥抱万物智联时代的决心。毛伟明省长在现场指出
    的头像 发表于 09-29 17:33 931次阅读
    开鸿智谷:做开源<b class='flag-5'>鸿蒙</b>的“引领者”,在湘江<b class='flag-5'>之</b>畔筑造万物智联新基石

    鸿蒙发展历程

    【HarmonyOS 5】鸿蒙发展历程 ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##鸿蒙金融类应用 (金融理财# 一、鸿蒙 HarmonyOS 版本年代记
    的头像 发表于 07-07 11:41 1516次阅读

    鸿蒙开发如何显示Markdown格式语法 -- markdown_hm介绍

    在开发过程中,对于内容的展示通常有富文本和Markdown两种,后者更偏向于技术文档、说明书一类的内容展示。但是和富文本不同的是,没有一个原生组件可以用来解析展示Markdown语法的内容,所以
    发表于 06-30 18:47

    鸿蒙5开发宝藏案例分享---穿戴开发宝藏指南

    太棒了!鸿蒙官方文档里竟然藏着这么个大宝藏!之前开发智能穿戴应用时感觉资源匮乏,没想到在“最佳实践”里藏着这么多 现成的、高质量的案例和代码 !今天必须跟大家好好分享一下这个“轻量级智能穿戴开发实践
    发表于 06-12 16:12

    鸿蒙电脑拿什么和Windows竞争

    5月8日,在鸿蒙电脑技术与生态沟通会上,鸿蒙操作系统(HarmonyOS 5)首次在电脑端亮相;这是华为首款鸿蒙电脑正式亮相。同时华为智慧办公将升级为鸿蒙办公。
    的头像 发表于 05-09 11:41 1082次阅读

    鸿蒙操作系统首登电脑端,华为开启鸿蒙办公新时代

    2025年5月8日,华为在深圳举办了鸿蒙电脑技术与生态沟通会,鸿蒙操作系统首次在电脑端亮相。这既是中国电子信息产业的历史性时刻,也是华为鸿蒙办公的新起点。 五年匠心打磨,鸿蒙电脑进一步
    发表于 05-08 14:20 5747次阅读
    <b class='flag-5'>鸿蒙</b>操作系统首登电脑端,华为开启<b class='flag-5'>鸿蒙</b>办公新时代

    harmony OS NEXT-双向数据绑定MVVM以及$$语法糖介绍

    # 鸿蒙Harmony-双向数据绑定MVVM以及$$语法糖介绍 ## 1.1 双向数据绑定概念 在鸿蒙(HarmonyOS)应用开发中,双向数据改变(或双向数据绑定)是一种让数据·模型和UI组件之间
    的头像 发表于 04-29 16:52 1109次阅读

    深度融入“纯血鸿蒙”|芯海科技旗下康柚OKOK首批入驻鸿蒙NEXT系统

    3月20日,随着首款全面搭载纯血鸿蒙系统的"宽折叠"手机PuraX的发布,全面鸿蒙时代正悄然到来。鸿蒙NEXT(纯血鸿蒙)自正式亮相以来,这一全球第三大独立操作系统以崭新
    的头像 发表于 03-21 18:04 1376次阅读
    深度融入“纯血<b class='flag-5'>鸿蒙</b>”|芯海科技旗下康柚OKOK首批入驻<b class='flag-5'>鸿蒙</b>NEXT系统

    AIGC入门及鸿蒙入门

    人工智能生成内容(AIGC)和鸿蒙系统是当前科技领域的两个热门话题。以下是对它们的入门指南: AIGC入门 1. 基础概念: AIGC,全称Artificial Intelligence
    发表于 01-13 10:32

    鸿蒙Flutter实战:14-现有Flutter 项目支持鸿蒙 II

    引言 在之前的文章鸿蒙Flutter实战:09-现有Flutter项目支持鸿蒙中,介绍了如何改造项目,适配鸿蒙平台。 文中讲述了整体的理念和思路,本文更进一步,结合可实操的项目代码,详细说明如何实施
    发表于 12-26 14:59