【鴻蒙學習筆記】@Link裝飾器:父子雙向同步

官方文檔:@Link裝飾器:父子雙向同步

目錄標題

  • [Q&A] @Link裝飾器作用
  • [Q&A] @Link裝飾器特點
  • 樣例:簡單類型
  • 樣例:數組類型
  • 樣例:Map類型
  • 樣例:Set類型
  • 樣例:聯合類型

[Q&A] @Link裝飾器作用

link是雙向數據同步:
父組件修改數據 , 子組件UI更新。
子組件修改數據, 父組件UI更新。

[Q&A] @Link裝飾器特點

  1. @Link裝飾器不能在@Entry裝飾的自定義組件中使用。
  2. @Link裝飾器禁止初始化。

樣例:簡單類型

class ButtonWidth {width: number = 0;constructor(width: number) {this.width = width;}
}@Component
struct GreenButton {@Link buttonWidth1: ButtonWidth;build() {Button('子 Green Button').width(this.buttonWidth1.width).height(40).backgroundColor('#64bb5c').fontColor('#FFFFFF,90%').onClick(() => {if (this.buttonWidth1.width < 300) {this.buttonWidth1.width += 30;} else {this.buttonWidth1 = new ButtonWidth(180);}})}
}@Entry
@Component
struct PracExample {@State buttonWidth: ButtonWidth = new ButtonWidth(180);build() {Column() {Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center }) {Button('父 Green Button').width(300).height(40).margin(12).fontColor('#FFFFFF,90%').onClick(() => {this.buttonWidth.width = (this.buttonWidth.width < 300) ? this.buttonWidth.width + 30 : 100;})GreenButton({ buttonWidth1: $buttonWidth }).margin(12)}}}
}

在這里插入圖片描述

樣例:數組類型

@Component
struct Child {@Link items: number[];build() {Column() {Button(`追加新值`).margin(12).width(312).height(40).fontColor('#FFFFFF,90%').onClick(() => {this.items.push(this.items.length + 1);})Button(`重置`).margin(12).width(312).height(40).fontColor('#FFFFFF,90%').onClick(() => {this.items = [100, 200, 300];})}}
}@Entry
@Component
struct PracExample {@State arr: number[] = [1, 2, 3];build() {Column() {Child({ items: $arr }).margin(12)ForEach(this.arr,(item: number) => {Button(`${item}`).margin(12).width(312).height(40).backgroundColor('#11a2a2a2').fontColor('#e6000000')},(item: ForEachInterface) => item.toString())}}
}

在這里插入圖片描述

樣例:Map類型

@Component
struct Child {@Link map: Map<number, string>build() {Column() {ForEach(Array.from(this.map.entries()), (item: [number, string]) => {Row() {Text(`${item[0]}`).fontSize(30)Text(`→`).fontSize(30)Text(`${item[1]}`).fontSize(30)}})Button('初始化').width('100%').onClick(() => {this.map = new Map([[0, "a"], [1, "b"], [3, "c"]]);})Button('追加新值').width('100%').onClick(() => {this.map.set(4, "d");})Button('清除').width('100%').onClick(() => {this.map.clear();})Button('修改第1個值').width('100%').onClick(() => {this.map.set(0, "aa");})Button('刪除第一個值').width('100%').onClick(() => {this.map.delete(0);})}}
}@Entry
@Component
struct PracExample {@State message: Map<number, string> = new Map([[0, "a"], [1, "b"], [3, "c"]])build() {Column() {Child({ map: this.message })}.width('100%')}
}

在這里插入圖片描述

樣例:Set類型

@Component
struct Child {@Link message: Set<number>build() {Column() {ForEach(Array.from(this.message.entries()), (item: [number, string]) => {Text(`${item[0]}`).fontSize(30)})Button('init set').width('100%').onClick(() => {this.message = new Set([0, 1, 2, 3, 4]);})Button('set new one').width('100%').onClick(() => {this.message.add(5);})Button('clear').width('100%').onClick(() => {this.message.clear();})Button('刪除元素5').width('100%').onClick(() => {this.message.delete(5);})}.width('100%')}
}@Entry
@Component
struct PracExample {@State message: Set<number> = new Set([0, 1, 2, 3, 4])build() {Column() {Child({ message: this.message })}.width('100%')}
}

在這里插入圖片描述

樣例:聯合類型

@Component
struct Child {@Link name: string | undefinedbuild() {Column() {Button('子 改名 小芳').width('100%').onClick(() => {this.name = "小芳"})Button('子 改名 undefined').width('100%').onClick(() => {this.name = undefined})}.width('100%')}
}@Entry
@Component
struct PracExample {@State name: string | undefined = "小明"build() {Column() {Text(`名字是 ${this.name}`).fontSize(30)Child({ name: this.name })Button('父 改名 小華').width('100%').onClick(() => {this.name = "小華"})Button('父 改名 undefined').width('100%').onClick(() => {this.name = undefined})}}
}

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/40999.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/40999.shtml
英文地址,請注明出處:http://en.pswp.cn/web/40999.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

信號與系統-實驗6-離散時間系統的 Z 域分析

一、實驗目的 1、掌握 z 變換及其性質&#xff1b;了解常用序列的 z 變換、逆 z 變換&#xff1b; 2、掌握利用 MATLAB 的符號運算實現 z 變換&#xff1b; 3、掌握利用 MATLAB 繪制離散系統零、極點圖的方法&#xff1b; 4、掌握利用 MATLAB 分析離散系統零、極點的方法&a…

字符串中的注意事項

在比較早的C/C版本中&#xff0c;經常可以看到推薦使用gets函數來進行整行字符串的輸入&#xff0c;就像下面這樣的簡單寫法即可輸入一整行&#xff1a; C gets(str);但是當輸入的字符串長度超過數組長度上限MAX_LEN時&#xff0c;gets函數會把超出的部分也一并讀進來&#x…

MySQL基礎篇(二)字符集以及校驗規則

在MySQL基礎篇&#xff08;一&#xff09;中&#xff0c;我們知道了如何創建數據庫&#xff0c;這篇文章帶大家了解創建的一些細節。 紅色框&#xff1a;可省略&#xff0c;作用如果存在相同的數據庫名稱&#xff0c;就不會再創建&#xff0c;反之&#xff0c;創建。 藍色框&…

uniapp 封裝請求

新建request文件夾 下新建index.js 和index.js 或者創建units文件放入index.js 和api文件夾放入index.js(api.js)//看公司規范 1. index.js // 全局請求封裝 // const base_url http://localhost:8080/devapi var base_url process.env.NODE_ENV development ? http://…

可用于多個微信管理的神器

以下僅是多微信聚合聊天管理界面&#xff1a; 可以在一個頁面上同時收發多個微信的消息&#xff0c;可以添加好友&#xff0c;通過好友請求。 可以修改昵稱&#xff0c;不受字數限制。 可以將常用圖片&#xff0c;文件等放入素材庫&#xff0c;方便聊天時查找和發送。 可以設置…

速盾:cdn 緩存圖片

現如今&#xff0c;互聯網已經成為我們日常生活中不可或缺的一部分。在我們使用互聯網時&#xff0c;經常會遇到圖片加載緩慢、文章打開慢等問題。為了解決這些問題&#xff0c;CDN&#xff08;內容分發網絡&#xff09;應運而生。CDN 是一種通過將數據緩存在世界各地的服務器上…

集群環境下,調用半數以上節點進行數據同步的實現

核心實現是使用CountDownLatch來實現的&#xff0c;先取集群節點總數一半以上數量的CountDownLatch 再發送請求調用其他節點&#xff0c;在這個過程中對于正常響應的節點進行latch.countDown(); 最后再統計數量是否為0再決定是否拋異常 // 請求參數final String content jso…

Java:封裝

文章目錄 一、概念二、實現三、測試四、總結 一、概念 在面向對象編程中&#xff0c; 封裝從字面上來理解就是包裝的意思&#xff0c;特點就是信息隱藏&#xff0c;防止該類的代碼和數據被外部類的代碼隨機訪問。 封裝的優點&#xff1a; 良好的封裝能夠減少耦合。 統一接口…

搜索旋轉數組

題目鏈接 搜索旋轉數組 題目描述 注意點 數組已被旋轉過很多次數組元素原先是按升序排列的若有多個相同元素&#xff0c;返回索引值最小的一個 解答思路 首先需要知道的是&#xff0c;本題數組中的旋轉多次只是將頭部的某些元素移動到尾部&#xff0c;所以不論怎么旋轉&am…

uni-app怎樣使用組件

在uni-app中使用組件&#xff0c;主要遵循以下幾個步驟&#xff1a; 創建組件文件&#xff1a;在UniApp項目中創建一個新的組件&#xff0c;通常將組件文件保存在components文件夾下。如果components文件夾不存在&#xff0c;需要先創建它。然后在components文件夾下創建一個新…

Pycharm python解釋器 unsupported python 3.1 解決

Pycharm 環境 unsupported python 3.1解決 1. 問題重現2. 原因分析3. 解決方法 1. 問題重現 之前使用Pycharm 2024.1.1的時候&#xff0c;環境配置的Python 3.11.9&#xff0c;現在改成使用Pycharm 2020.2.2&#xff0c;結果Python解釋器顯示“unsupported python 3.1”&#…

Java ORM框架FastMybatis踩坑

Java ORM框架FastmyBatis踩坑 問題&#xff1a;使用了FastmyBatis的saveOrUpdate方法&#xff0c;明明設置了主鍵的值且表中存在&#xff0c;但是依然執行insert操作。導致Duplicate PK。 原因&#xff1a;使用了其他第三方包的注解指定表的主鍵&#xff0c;沒有按照FastmyBat…

低音炮內存卡格式化后無法播放音樂文件

試了多次 不支持ntfs不支持exfat 僅支持fat32 FAT32與exFAT的區別主要體現在來源、單個文件限制、適用情況以及兼容性方面。12 來源&#xff1a; FAT32是Windows平臺的傳統文件格式&#xff0c;首次在Windows 95第二版中引入&#xff0c;旨在取代FAT16&#xff0c;具有良好的…

自動駕駛中的逆透視變換(Inverse Perspective Mapping,IPM)詳解

前言 IPM(Inverse Perspective Mapping,逆透視變換)圖的歷史可以追溯到計算機視覺和圖像處理領域的發展。逆透視變換是一種用于消除圖像中透視效應的技術,使得原本由于透視產生的形變得以糾正,進而更準確地描述和理解圖像中的場景。比如在行車中的車道線檢測,泊車中的常見…

陳志泊主編《數據庫原理及應用教程第4版微課版》的實驗題目參考答案實驗2

實驗目的 1&#xff0e;掌握在SQL Server中使用對象資源管理器和SQL命令創建數據庫與修改數據庫的方法。 2&#xff0e;掌握在SQL Server中使用對象資源管理器或者SQL命令創建數據表和修改數據表的方 法&#xff08;以SQL命令為重點&#xff09;。 實驗設備 操作系統:Win11…

使用Source Insight 4.0

一、使用書簽 二、添加文件 三、Search 3.1 替換所有變量 四、右鍵查詢 4.1 查看被調用的地方

Linux上腳本備份數據庫(升級版)

直接上代碼&#xff1a; #!/bin/bash# 配置部分 mysql_user"root" mysql_host"localhost" mysql_port"3306" mysql_charset"utf8mb4" mysql_defaults_file"/home/mysql/mysql_back/.my.cnf"backup_base_dir"/mnt/sdd/…

GRPC使用之HelloWorld

使用grpc的好處是提供高效的序列化能力&#xff0c;能夠跨語言進行調用。這一節我們來學習grpc的入門應用&#xff0c;整篇文章分成3部分: 接口定義&#xff0c;使用grpc的IDL&#xff0c;創建proto文件&#xff0c;編譯/生成grpc文件服務端開發&#xff0c;處理客戶端請求&am…

計算云服務1

前言 一直以來&#xff0c;計算資源都是整個企業業務系統發展所需的大動脈&#xff0c;沒有計算資源&#xff0c;企業業務就無法正常運行。在云計算的時代里&#xff0c;計算服務也是云服務中的第一大類服務&#xff0c;計算資源的重要性由此可見。本章&#xff0c;我們將帶領…

C++之do-while陳述

回圈是用來進行進行重復性的工作&#xff0c;典型的回圈會進行下列三項基本任務 1.控制變數初始設定2. 回圈結束條件測試3. 調整控制變數的值 關鍵字(keyword) do與while構成C 中回圈的一種&#xff0c;常用于后測式的回圈&#xff0c;意思是回圈會先進行第一輪&#xff0c;然后…