色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

分享HarmonyOS數據綁定使用技巧

電子工程師 ? 來源:HarmonyOS開發者 ? 作者:songcongyi ? 2021-05-27 15:19 ? 次閱讀

相信各位應用開發者在寫應用的前端部分時,會遇到這樣的場景:通過某一事件觸發界面上某一內容改變。比如說手表上心率數據的變化,是心率變化的事件觸發手表界面心率數據的改變。看似簡單的場景,實際上用到了“數據綁定”這一技術。

“事件”首先改變的是js中的一段文字對象,因js中的文字對象和標記語言的text組件里的文字內容做了數據綁定,使得改變js文字對象的操作能夠令text組件里的文字內容發生改變。

“數據綁定”是實現上述場景最基礎的技術,本文會基于一系列實例詳細介紹”HarmonyOS數據綁定“的使用方法和技巧。

01

數據綁定概念

數據綁定,指的是將界面元素(View)的數據和對象實例(Model)的數據進行綁定,使它們具有相關性。

根據界面元素更新是否會引起對象實例的更新,數據綁定可分為單向數據綁定和雙向數據綁定。單向數據綁定指的是對象實例的數據更新會引起界面元素的更新,反之不行;雙向數據綁定指的是對象實例的數據更新會引起界面元素的數據更新,界面元素的數據更新也會引起對象實例的數據更新。

根據對象實例數據類型的不同,數據綁定又可分為簡單數據綁定和復雜數據綁定,簡單數據綁定數據為基本類型,而復雜數據綁定數據為列表類型。

1)HarmonyOS中的數據綁定

HarmonyOS目前支持單向數據綁定,即通過對象實例的數據更新來改變界面元素的數據。下面是Mustache語法數據綁定的通用寫法的代碼例子:

Hello {{title}}

/* index.js */import device from '@system.device';export default { data: { title : 'world', width: 0, height: 0, },onInit(){ // 根據設備設置窗口的寬高 device.getInfo({ success: (data)=> { this.width =data.windowWidth; this.height =data.windowHeight; } }); }}/* index.css */.container { flex-direction:column; justify-content:flex-start; align-items:flex-start;}

本文的代碼例子都會包含三個文件——元素構建.hml、交互設計.js以及布局定義.css,只有.hml中可以寫數據綁定語法,請各位在閱讀時注意區分。下面來介紹HarmonyOS簡單數據綁定和復雜數據綁定。

02

HarmonyOS簡單數據綁定

HarmonyOS的簡單數據綁定支持“屬性綁定”、“樣式綁定”、“動畫綁定”和“內容綁定”。樣式綁定和動畫綁定實際上是通過屬性標簽發揮作用的,下面我們詳細看一下具體使用過程。

1)屬性綁定

屬性可分為“通用屬性”和“特有屬性”,其中通用屬性包括id、style、for、if、show和class,特有屬性為各組件獨有的屬性如switch的checked。下面我們先看通用屬性show綁定switch顯示數據的代碼:

點擊藍色按鈕,代表觸發改變switch 中show屬性的“事件”,show屬性的值從“false”改變為“true”,switch組件(白色開關按鈕)會在界面上顯示出來。如圖1所示:

圖1 通用屬性show改變導致switch顯示改變

/*index.js*/import device from '@system.device';export default{ data:{ showValue:false, width:0, height:0,}, // showChange觸發會使showValue值改變 showChange(){ this.showValue =true; }, onInit(){ device.getInfo({ success:(data)=>{ this.width = data.windowWidth; this.height = data.windowHeight; } }); }}/* index.css */.input1 { width:40px; height:40px;}.switch{ width:90px; height:90px;}.container { flex-direction: column; justify-content: flex-start; align-items: flex-start;}

特有屬性是各個組件獨有的屬性,如switch中的checked。下面是switch中checked屬性數據綁定的用法:

點擊藍色按鈕,代表觸發改變switch 中checked屬性的“事件”,checked屬性的值從“false”改變為“true”,switch組件(白色開關按鈕)的狀態從“關”變成“開”。如圖2所示:

圖2 特有屬性checked改變導致switch狀態改變

/* index.js */importdevicefrom'@system.device';export default { data: { checkedValue: false, width: 0, height: 0, },//checkedChange觸發會使checkedValue值改變 checkedChange() { this.checkedValue = true; }, onInit() { device.getInfo({ success: (data) => { this.width = data.windowWidth; this.height = data.windowHeight; } }); }}/* index.css */.input1 { width: 40px; height: 40px;}.switch { width: 40px; height: 40px;}.container { flex-direction: column; justify-content: flex-start; align-items: flex-start;}

2)樣式綁定

樣式有靜態和動態之分,靜態樣式直接寫在元素標簽的關鍵字style中;動態樣式寫在.css文件中,通過關鍵字class引入。當前動態樣式不支持數據綁定,數據綁定只能用在靜態樣式中,下面是switch靜態樣式寬高的數據綁定用法:

點擊藍色按鈕,代表觸發改變switch 中靜態樣式寬高改變的“事件”,靜態樣式寬高的值從“40px”改變為“90px”,switch組件(白色開關按鈕)的寬高變大。如圖3所示:

圖3 通用樣式寬高改變導致switch組件大小改變

/* index.js */importdevicefrom'@system.device';export default { data: { rectValue: '40px', width: 0, height: 0, },//rectChange觸發會使rectValue值改變 rectChange() { this.rectValue = '90px'; }, onInit() { device.getInfo({ success: (data) => { this.width = data.windowWidth; this.height = data.windowHeight; } }); }}/* index.css */.input1 { width: 40px; height: 40px;}.switch { width: 40px; height: 40px;}.container { flex-direction: column; justify-content: flex-start; align-items: flex-start;}

3)動畫綁定

動畫效果可以通過靜態樣式中的關鍵字animation-name改變。我們可以在.css文件中創建多種keyframes的動畫效果,通過animation-name改變keyframes,以實現動畫效果的切換,下面是一個例子:

點擊藍色按鈕,這是代表觸發改變div 中動畫效果的"事件",animation-name的值從“animationChange1”改變為“animationChange2”,div組件動效從顏色變化動效變成寬度變化動效。如圖4所示:

圖4 animation-name改變導致動畫樣式改變

/*index.js*/import device from '@system.device';export default { data: { animationName: 'animationChange1', width: 0, height: 0, }, //animationChange觸發會使animationName值改變 animationChange() { this.animationName ="animationChange2"; }, onInit() { device.getInfo({ success: (data) => { this.width = data.windowWidth; this.height = data.windowHeight; } }); }}/* index.css */.input1 { width: 40px; height: 40px;}.div-block { width: 200px; height: 80px; background-color: #ff0000;}.div-animation-style{ animation-duration: 3000ms; animation-timing-function: linear; animation-fill-mode: none; animation-iteration-count: 1;}.container { flex-direction: column; justify-content: flex-start; align-items: flex-start;}/* 初始動畫效果改變背景顏色 */@keyframes animationChange1 { from { background-color: #ff0000; } to { background-color: #0000ff; }}/* 切換后動畫效果改變為方塊寬度變化 */@keyframes animationChange2 { from { width: 200px; } to { width: 250px; }}

4)內容綁定

除了屬性、樣式和動畫綁定,HarmonyOS一些特殊組件如text,其標簽內容中可以添加數據綁定,具體使用方法如下:

點擊藍色按鈕,代表觸發改變text 中文字內容的“事件”,text組件中文字內容從“Hello World”改變為“Hello Bob”,界面顯示的文字相應改變。如圖5所示:

圖5 文字數據改變導致text中的文字內容改變

Hello {{ title }}
/*index.js*/import device from '@system.device';export default { data: { title: 'World', width: 0, height: 0, },//titleChange觸發會使text中的title值改變 titleChange() { this.title = 'Bob'; }, onInit() { device.getInfo({ success: (data) => { this.width = data.windowWidth; this.height = data.windowHeight; } }); }}/* index.css */.input1 { width: 40px; height: 40px;}.title { width: 100px; height: 100px; font-size: 20px; text-align: center;}.container { flex-direction: column; justify-content: flex-start; align-items: flex-start;}

簡單數據綁定中,通用屬性基本都支持數據綁定,如style、if和show中綁定的對象數據改變都會使相應的View改變并刷新,只有class不支持數據綁定。同時,id雖然支持數據綁定,但其綁定的對象數據改變實際上只修改了DOM,不會對View有影響。

03

HarmonyOS復雜數據綁定

當數據綁定的對象為列表(數組)時,與for搭配使用,可以實現通過for展開多個組件(即列表渲染),減少.hml重復寫組件。復雜數據綁定和列表渲染是強相關的,我們可以先了解一下HarmonyOS應用開發中如何用for屬性做列表渲染。

1)列表渲染

參考HarmonyOS官網的開發文檔:

https://developer.harmonyos.com/cn/docs/documentation/doc-references/lite-wearable-syntax-hml-0000001078368468

我們可以看到列表渲染主要有三種方式:

for="array":其中array為數組對象,array的元素變量默認為$item。

for="v in array":其中v為自定義的元素變量,元素索引默認為$idx。

for="(i, v) in array":其中元素索引為i,元素變量為v,遍歷數組對象array。

這三種方式的實現代碼為:

{{$idx}}.{{$item.name}}
{{$idx}}.{{value.name}}
{{index}}.{{value.name}}
//index.jsexport default { data: { array: { {id: 1, name: 'jack', age: 18}, {id: 2, name: 'tony', age: 18} } }}

2)通用屬性的復雜數據綁定

下面以靜態style屬性為例,將style和數組進行數據綁定,可以通過改變數組的數據讓組件樣式改變,具體使用方法如下:

點擊藍色按鈕,代表觸發改變與數組綁定的某switch組件寬高的“事件”,第二個switch靜態樣式寬高的值從“40px”改變為“90px”,switch組件(白色開關按鈕)的寬高變大。如圖6所示:

圖6 綁定靜態樣式的數組改變導致switch寬高改變

/*index.js*/import device from '@system.device';export default { data: {//定義兩個寬高相等的switch rectArr: [ {"width": "40px","height": "40px"}, {"width": "40px","height": "40px"} ], width: 0, height: 0, },//改變第二個switch大小 switchChange() { this.rectArr[1].width = "90px"; this.rectArr[1].height = "90px"; }, // 推薦使用splice方法改變switch大小 // switchChange() { // this.rectArr.splice(1, 1, {"width": "90px", "height": "90px"}); //} onInit() { device.getInfo({ success: (data) => { this.width = data.windowWidth; this.height = data.windowHeight; } }); }}/* index.css */.input1 { width: 40px; height: 40px;}.container { flex-direction: column; justify-content: flex-start; align-items: flex-start;}

然而,有一些屬性不支持復雜數據綁定,例如, if屬性和swiper組件的loop屬性等。他們的對象數據改變,都無法改變相應的view層顯示效果,具體組件的數據綁定支持情況可以查閱官方開發文檔。

04

總結

HarmonyOS簡單數據綁定,可以支持“屬性綁定”、“樣式綁定”、“動畫綁定”和“內容綁定”。HarmonyOS復雜數據綁定支持情況和簡單數據綁定支持情況相同。對于諸多組件中存在的特有屬性的復雜數據綁定支持情況,歡迎各位開發者參與驗證。最后概括HarmonyOS數據綁定的使用技巧:

1. HamonyOS僅支持單向的數據綁定,語法為Mustache;

2. 在簡單數據綁定場景下,style、if和show及特有的屬性都會刷新View的顯示;

3. 在簡單數據綁定場景下,靜態樣式中的animation-name更改會刷新View的動畫效果;

4. 在簡單數據綁定場景下,text等組件的內容綁定更改會刷新View的顯示;

5. 在復雜數據綁定場景下,數據綁定的支持情況和簡單數據綁定相同,推薦使用splice方法對數據內容進行增刪;

以下思維導圖概括了該版本下HarmonyOS數據綁定的支持情況。

5f397af0-beb9-11eb-9e57-12bb97331649.jpg

圖7 HarmonyOS數據綁定全貌圖

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    7067

    瀏覽量

    89107
  • 代碼
    +關注

    關注

    30

    文章

    4791

    瀏覽量

    68679
  • HarmonyOS
    +關注

    關注

    79

    文章

    1977

    瀏覽量

    30256

原文標題:HarmonyOS數據綁定使用技巧

文章出處:【微信號:HarmonyOS_Dev,微信公眾號:HarmonyOS開發者】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    fpga 管腳不讓綁定的問題,綁定時提示: Not assignable

    fpga 管腳不讓綁定的--提示 如下圖: 網上說將復用管腳設置成 普通I/O,我這也沒找到我要綁定的管腳,怎么設置。該管腳是和NOR_Flash相關的,無法綁定,我想實現掉電存儲一些數據
    發表于 12-05 15:30

    怎么綁定IP地址和MAC地址

    本篇文章主要說一說怎么在本地計算機上綁定IP和MAC地址以及通過路由器綁定IP和MAC地址,并且這兩者綁定可以解決什么問題。 ? 先來說說怎么去綁定 本地計算上
    的頭像 發表于 12-01 22:48 ?264次閱讀

    機智云智家APP的設備掃描與綁定限制

    在使用機智云的智家APP時,用戶可能會遇到無法掃描和綁定設備的問題。這一現象的根本原因在于智家APP的使用限制和付費策略。Q智家APP的功能概述是什么?智家APP是機智云平臺為用戶提供的公
    的頭像 發表于 09-22 08:02 ?249次閱讀
    機智云智家APP的設備掃描與<b class='flag-5'>綁定</b>限制

    HarmonyOS NEXT Developer Beta1最新術語表

    的內容。頁面具備數據綁定、事件綁定、列表渲染、條件渲染等高級能力。 Hop,流轉 在HarmonyOS中泛指涉及多端的分布式操作。流轉能力打破設備界限,多設備聯動,使用戶應用程序可分可
    發表于 06-27 16:16

    鴻蒙開發Ability Kit程序框架服務:Stage模型綁定FA模型ServiceAbility

    本小節介紹Stage模型的兩種應用組件如何綁定FA模型ServiceAbility組件。
    的頭像 發表于 06-25 21:47 ?314次閱讀
    鴻蒙開發Ability Kit程序框架服務:Stage模型<b class='flag-5'>綁定</b>FA模型ServiceAbility

    鴻蒙ArkTS聲明式開發:跨平臺支持列表【綁定手勢方法】 手勢處理

    為組件綁定不同類型的手勢事件,并設置事件的響應方法。
    的頭像 發表于 06-15 09:17 ?795次閱讀
    鴻蒙ArkTS聲明式開發:跨平臺支持列表【<b class='flag-5'>綁定</b>手勢方法】 手勢處理

    BLE藍牙掉電綁定信息消失的原因?怎么解決?

    測試手機連接后,重啟ESP32S3,板子上的綁定信息就丟失了。還有我添加到白名單的地址也會隨著重啟消失。白名單我可以通過NVS記錄,但是綁定的密鑰信息我無法存儲。我查閱了BLE的接口文檔,沒有看到保存綁定信息的接口。請教一下我應
    發表于 06-14 06:25

    鴻蒙開發接口Ability框架:【@ohos.application.formBindingData (卡片數據綁定類)】

    卡片數據綁定模塊提供卡片數據綁定的能力。包括FormBindingData對象的創建、相關信息的描述。
    的頭像 發表于 05-06 17:25 ?500次閱讀
    鴻蒙開發接口Ability框架:【@ohos.application.formBindingData (卡片<b class='flag-5'>數據</b><b class='flag-5'>綁定</b>類)】

    udp_bind這個綁定的端口怎么解除?

    請教下,udp_bind 這個綁定的端口,剛開始是可以的,但是重新綁定時返回錯誤,有什么方法可以在 重新綁定前解除之前的綁定
    發表于 04-22 07:41

    HarmonyOS開發案例:【首選項】

    基于HarmonyOS的首選項能力實現的一個簡單示例。
    的頭像 發表于 04-19 16:20 ?1266次閱讀
    <b class='flag-5'>HarmonyOS</b>開發案例:【首選項】

    2024款鴻蒙OS 最新HarmonyOS Next_HarmonyOS4.0系列教程分享

    鴻蒙的出現,標志著中國科技的崛起。HarmonyOS就是我們說的華為鴻蒙系統,截止到2023年8月4日已有超過7億臺設備搭載了鴻蒙OS系統。據多家媒體報道,2024年國內有21所985大學都開設
    發表于 02-28 10:29

    HarmonyOS開發技術全面分析

    數據管理基于分布式軟總線的能力,實現應用程序數據和用戶數據的分布式管理。用戶數據不再與單一物理設備綁定,業務邏輯與
    發表于 02-21 16:31

    請問tc233 Uart收發數據如何綁定到DMA?

    請問tc233 Uart收發數據如何綁定到DMA?綁定到DMA之后中斷觸發還是原來的 IfxCpu_Irq_installInterruptHandler()這個函數里綁定的中斷服務函
    發表于 01-22 06:27

    服務器寶塔面板怎么綁定多個ip?

    服務器寶塔面板怎么綁定多個ip?在寶塔面板中綁定多個IP地址可以通過以下步驟完成: 1、登錄寶塔面板 使用你的瀏覽器訪問寶塔面板的網址,并使用管理員賬號和密碼登錄。 2、進入站點管理 在寶塔面板左側
    的頭像 發表于 01-12 17:29 ?1723次閱讀

    harmonyos和安卓的區別

    HarmonyOS是由華為開發的一款全場景分布式操作系統,而安卓(Android)則是由谷歌開發的移動操作系統。雖然兩者都是操作系統,但它們在很多方面存在明顯的區別。下面是關于HarmonyOS和安
    的頭像 發表于 01-10 17:55 ?3614次閱讀
    主站蜘蛛池模板: 亲胸摸下面激烈免费网站| 久久观看视频| 精品视频免费在线观看| 桃花论坛POWERED2019| 扒开美女嫩bbb| 欧洲video60| xxx在线播放| 欧洲老妇人bb| xxxx老妇性hdbbbb| 欧美人与禽zoz0性伦交app| 成人免费视频一区| 国产精品久久久久影院| 日本美女抠逼| 扒开老师大腿猛进AAA片软件| 美国色吧影院| 十大禁止安装的黄台有风险| 成人a毛片久久免费播放| 琪琪SEE色原网色原网站18| 99视频网站| 久热久热精品在线观看| 在线超碰免费视频观看| 久久秋霞理伦片| 睡觉被偷偷进入magnet| 国产精品99久久久久久宅男AV| 我强进了老师身体在线观看| 国产高清在线观看| 亚洲精品国产乱码AV在线观看| 果冻传媒在线观看资源七夕| 亚洲伊人久久精品| 美女爱爱网站| xart欧美一区在线播放| 色悠久久综合| 和美女啪啪啪动态图| 在线免费中文字幕| 欧美一区二区视频97色伦| 都市妖奇谈有声| 欧美另类z0z000高清| 帝王被大臣们调教高肉| 小妇人电影免费完整观看2021| 精品久久久久久无码人妻国产馆 | 5g天天奭视频|