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

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

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

鴻蒙之HML語(yǔ)法參考

王程 ? 來(lái)源:jf_75796907 ? 作者:jf_75796907 ? 2024-02-20 15:53 ? 次閱讀

HML(HarmonyOS Markup Language)是一套類HTML的標(biāo)記語(yǔ)言,通過(guò)組件,事件構(gòu)建出頁(yè)面的內(nèi)容。頁(yè)面具備數(shù)據(jù)綁定、事件綁定、條件渲染和邏輯控制等高級(jí)能力。

頁(yè)面結(jié)構(gòu)


Image Show

數(shù)據(jù)綁定


{{content}} {{key1}} {{key2}} key1 {{key1}} {{flag1 && flag2}} {{flag1 || flag2}} {{!flag1}}

卡片hml文件中的變量需要在json文件的data字段下進(jìn)行聲明:

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

說(shuō)明

key值支持對(duì)象操作符和數(shù)組操作符,如{{key.value}}、{{key[0]}}。

支持字符串拼接、邏輯運(yùn)算和三元表達(dá)式。

字符串拼接:

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

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

邏輯運(yùn)算:

與:{{flag1 && flag2}}(僅支持兩個(gè)boolean變量間的與邏輯運(yùn)算)

或:{{flag1 || flag2}}
(僅支持兩個(gè)boolean變量間的或邏輯運(yùn)算)

非:{{!flag1}} (僅支持boolean變量的非邏輯運(yùn)算)

三元表達(dá)式

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

注意事項(xiàng)

非boolean類型值進(jìn)行bool運(yùn)算默認(rèn)為false

以上所有變量解析跟運(yùn)算解析均不支持嵌套

事件綁定

卡片的事件需要在json文件的actions字段下進(jìn)行聲明??ㄆ瑑H支持click通用事件,事件的定義只能是直接命令式,事件定義必須包含action字段,用以說(shuō)明事件類型??ㄆС謨煞N事件類型:跳轉(zhuǎn)事件(router)和消息事件(message)。跳轉(zhuǎn)事件可以跳轉(zhuǎn)到卡片提供方的HarmonyOS應(yīng)用,消息事件可以將開發(fā)者自定義信息傳遞給卡片提供方。事件參數(shù)支持變量,變量以"{{}}"修飾。跳轉(zhuǎn)事件中若定義了params字段,則在被拉起應(yīng)用的onStart的intent中,可用"params"作為key將跳轉(zhuǎn)事件定義的params字段的值取到。

跳轉(zhuǎn)事件格式

通過(guò)定義ability名稱和攜帶的參數(shù)字段params直接跳轉(zhuǎn),可用"params"作為key提取到跳轉(zhuǎn)事件定義的params字段值。

選擇器 樣例 默認(rèn)值 樣例描述
action string “router” 事件類型。- “router”:用于應(yīng)用跳轉(zhuǎn)。- “message”:自定義點(diǎn)擊事件。
abilityName string - 跳轉(zhuǎn)ability名。
params Object - 跳轉(zhuǎn)應(yīng)用攜帶的額外參數(shù)。

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

消息事件格式

選擇器 樣例 默認(rèn)值 樣例描述
action string message 表示事件類型。
params Object - 跳轉(zhuǎn)應(yīng)用攜帶的額外參數(shù)。

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

綁定路由事件和消息事件

 

列表渲染


{{$item.name}}

{{value.name}}

{{value.name}}

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

tid屬性主要用來(lái)加速for循環(huán)的重渲染,旨在列表中的數(shù)據(jù)有變更時(shí),提高重新渲染的效率。tid屬性是用來(lái)指定數(shù)組中每個(gè)元素的唯一標(biāo)識(shí),如果未指定,數(shù)組中每個(gè)元素的索引為該元素的唯一id。例如上述tid="id"表示數(shù)組中的每個(gè)元素的id屬性為該元素的唯一標(biāo)識(shí)。for循環(huán)支持的寫法如下:

for=“array”:其中array為數(shù)組對(duì)象,array的元素變量默認(rèn)為$item。

for=“v in array”:其中v為自定義的元素變量,元素索引默認(rèn)為$idx。

for=“(i, v) in array”:其中元素索引為i,元素變量為v,遍歷數(shù)組對(duì)象array。

說(shuō)明

數(shù)組中的每個(gè)元素必須存在tid指定的數(shù)據(jù)屬性,否則運(yùn)行時(shí)可能會(huì)導(dǎo)致異常。

數(shù)組中被tid指定的屬性要保證唯一性,如果不是則會(huì)造成性能損耗。比如,示例中只有id和name可以作為tid字段,因?yàn)樗鼈儗儆谖ㄒ蛔侄巍?/p>

tid不支持表達(dá)式。

不支持for嵌套使用。

for對(duì)應(yīng)的變量數(shù)組,當(dāng)前要求數(shù)組中的object是相同類型,不支持多種object類型混合寫在一個(gè)數(shù)組中

條件渲染

條件渲染分為2種:if/elif/else和show。

當(dāng)使用if/elif/else寫法時(shí),節(jié)點(diǎn)必須是兄弟節(jié)點(diǎn),否則編譯無(wú)法通過(guò)。實(shí)例如下:


Hello-TV Hello-Wearable Hello-World

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

當(dāng)show為真時(shí),節(jié)點(diǎn)正常渲染;當(dāng)show為假時(shí),節(jié)點(diǎn)不渲染,效果等同display樣式為none。


 Hello World 
{
  "data": {
    "visible": false
  }
}

邏輯控制塊

控制塊使得循環(huán)渲染和條件渲染變得更加靈活;block在構(gòu)建時(shí)不會(huì)被當(dāng)作真實(shí)的節(jié)點(diǎn)編譯。block標(biāo)簽只支持if屬性。

 

Hello World

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

Markdown 3634 字?jǐn)?shù) 238 行數(shù) 當(dāng)前行 3, 當(dāng)前列 0

HTML 3362 字?jǐn)?shù) 179 段落

審核編輯 黃宇

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

    關(guān)注

    0

    文章

    43

    瀏覽量

    9752
  • 鴻蒙
    +關(guān)注

    關(guān)注

    57

    文章

    2295

    瀏覽量

    42641
  • HarmonyOS
    +關(guān)注

    關(guān)注

    79

    文章

    1958

    瀏覽量

    29917
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Verilog語(yǔ)法中運(yùn)算符的用法

    verilog語(yǔ)法中使用以下兩個(gè)運(yùn)算符可以簡(jiǎn)化我們的位選擇代碼。
    的頭像 發(fā)表于 10-25 15:17 ?74次閱讀
    Verilog<b class='flag-5'>語(yǔ)法</b>中運(yùn)算符的用法

    FPGA學(xué)習(xí)筆記---基本語(yǔ)法

    Verilog語(yǔ)法是指硬件能夠?qū)崿F(xiàn)的語(yǔ)法。它的子集很小。常用的RTL語(yǔ)法結(jié)構(gòu)如下: 1、模塊聲明:module ... end module 2、端口聲明:input, output, inout
    發(fā)表于 06-23 14:58

    esp32-s2-hml-devkit-1的智能面板demo如何放到esp-idf編譯?

    esp32-s2-hml-devkit-1的智能面板demo如何放到esp-idf編譯?
    發(fā)表于 06-19 07:56

    騰訊突然宣布,微信鴻蒙版要來(lái)了!

    今年初, 華為宣布HarmonyOS NEXT命名為“鴻蒙星河版” ,并計(jì)劃在二季度啟動(dòng)開發(fā)者 Beta 計(jì)劃,四季度發(fā)布商用正式版。 消息一出,不少人為振奮。 鴻蒙星河版因不再兼容安卓開源
    發(fā)表于 04-30 19:34

    鴻蒙NEXT南向開發(fā)案例:【智能臺(tái)燈】

    鴻蒙南向開發(fā)智能臺(tái)燈案例
    的頭像 發(fā)表于 04-03 18:00 ?889次閱讀
    <b class='flag-5'>鴻蒙</b>NEXT南向開發(fā)案例:【智能臺(tái)燈】

    使用 Taro 開發(fā)鴻蒙原生應(yīng)用 —— 快速上手,鴻蒙應(yīng)用開發(fā)指南

    隨著鴻蒙系統(tǒng)的不斷完善,許多應(yīng)用廠商都希望將自己的應(yīng)用移植到鴻蒙平臺(tái)上。最近,Taro 發(fā)布了 v4.0.0-beta.x 版本,支持使用 Taro 快速開發(fā)鴻蒙原生應(yīng)用,也可將現(xiàn)有的小程序轉(zhuǎn)換
    的頭像 發(fā)表于 02-02 16:09 ?767次閱讀
    使用 Taro 開發(fā)<b class='flag-5'>鴻蒙</b>原生應(yīng)用 —— 快速上手,<b class='flag-5'>鴻蒙</b>應(yīng)用開發(fā)指南

    鴻蒙OS和開源鴻蒙什么關(guān)系?

    開源鴻蒙(Open Harmony) 鴻蒙系統(tǒng)愿來(lái)的設(shè)計(jì)初衷,就是讓所有設(shè)備都可以運(yùn)行一個(gè)系統(tǒng),但是每個(gè)設(shè)備的運(yùn)算能力和功能都不同,所以內(nèi)核的設(shè)計(jì)上,采用了微內(nèi)核的設(shè)計(jì),除了最基礎(chǔ)的功能放在
    的頭像 發(fā)表于 01-30 15:44 ?1007次閱讀
    <b class='flag-5'>鴻蒙</b>OS和開源<b class='flag-5'>鴻蒙</b>什么關(guān)系?

    鴻蒙開發(fā)基礎(chǔ)-Web組件cookie操作

    }) ... } ... 本文章主要是對(duì)鴻蒙開發(fā)當(dāng)中ArkTS語(yǔ)言的基礎(chǔ)應(yīng)用實(shí)戰(zhàn),Web組件里的cookie操作。更多的鴻蒙應(yīng)用開發(fā)技術(shù),可以前往我的主頁(yè)學(xué)習(xí)更多,下面是一張鴻蒙的學(xué)習(xí)路線如圖(略縮版): 高清完整版,保
    發(fā)表于 01-14 21:31

    oracle和mysql語(yǔ)法區(qū)別大嗎

    Oracle和MySQL是兩種不同的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS)。雖然它們都是遵循SQL標(biāo)準(zhǔn),但在語(yǔ)法和特性上仍存在一些區(qū)別。以下是對(duì)Oracle和MySQL語(yǔ)法區(qū)別的詳細(xì)說(shuō)明: 數(shù)據(jù)類型
    的頭像 發(fā)表于 12-06 10:26 ?1023次閱讀

    oracle case when 語(yǔ)法介紹

    Oracle的CASE WHEN語(yǔ)法是一種在數(shù)據(jù)庫(kù)查詢中使用的條件語(yǔ)句,它提供了一種在SELECT語(yǔ)句中根據(jù)條件對(duì)結(jié)果進(jìn)行轉(zhuǎn)換或篩選的方法。在本文中,我們將詳細(xì)介紹Oracle的CASE WHEN
    的頭像 發(fā)表于 12-06 10:21 ?1544次閱讀

    oracle的update語(yǔ)法

    Oracle是一種強(qiáng)大的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),具有廣泛的應(yīng)用,UPDATE語(yǔ)句是用于修改數(shù)據(jù)庫(kù)中現(xiàn)有記錄的重要操作之一。在本文中,我們將詳細(xì)介紹Oracle的UPDATE語(yǔ)法及其用法。 首先,我們
    的頭像 發(fā)表于 12-05 16:22 ?2117次閱讀

    javascript的基本語(yǔ)法遵循的標(biāo)準(zhǔn)

    JavaScript是一種腳本語(yǔ)言,用于為網(wǎng)站添加交互性和動(dòng)態(tài)性的功能。它的基本語(yǔ)法遵循ECMAScript標(biāo)準(zhǔn),這是一種由Ecma國(guó)際組織制定的語(yǔ)言標(biāo)準(zhǔn)。本文將詳細(xì)介紹JavaScript
    的頭像 發(fā)表于 12-03 11:35 ?2615次閱讀

    java switch case的語(yǔ)法規(guī)則

    在Java中,switch case語(yǔ)句是一種用于多分支選擇的控制流語(yǔ)句。它允許根據(jù)某個(gè)表達(dá)式的值來(lái)執(zhí)行不同的代碼塊。下面是關(guān)于switch case語(yǔ)法規(guī)則的詳細(xì)解釋。 基本語(yǔ)法 switch語(yǔ)句
    的頭像 發(fā)表于 11-30 14:40 ?1809次閱讀

    select語(yǔ)句的基本語(yǔ)法

    、詳實(shí)、細(xì)致地解釋SELECT語(yǔ)句的基本語(yǔ)法以及關(guān)鍵部分。 SELECT語(yǔ)句的基本語(yǔ)法如下: SELECT 列名 1 , 列名 2 , ... FROM 表名 WHERE 條件 上述語(yǔ)法可以分為三個(gè)
    的頭像 發(fā)表于 11-17 16:23 ?1697次閱讀

    鴻蒙 OS 應(yīng)用開發(fā)初體驗(yàn)

    Android 基本無(wú)差,所以熟悉 Android 開發(fā)的同學(xué)上手基本沒啥難度。 ArkTS ArkTS 是鴻蒙生態(tài)的應(yīng)用開發(fā)語(yǔ)言。它在保持 TypeScript(簡(jiǎn)稱 TS)基本語(yǔ)法風(fēng)格的基礎(chǔ)上
    發(fā)表于 11-02 19:38