鴻蒙開發小案例(名片管理))

鴻蒙開發小案例(名片管理)

  • 1、頁面效果
    • 1.1 初始頁面
    • 1.2 點擊名片展開
    • 1.3 點擊收藏
    • 1.4 點擊編輯按鈕
  • 2、實現代碼
    • 2.1 DataModel.ets
    • 2.2 RandomUtil.ets
    • 2.3 ContactList.ets

1、頁面效果


1.1 初始頁面

在這里插入圖片描述

1.2 點擊名片展開

在這里插入圖片描述

1.3 點擊收藏

在這里插入圖片描述

1.4 點擊編輯按鈕

在這里插入圖片描述

2、實現代碼


2.1 DataModel.ets

let nextId = 1;@Observed
export class Person {id: number;name: string;phone: string;isStar: boolean = false;constructor(name, phone) {this.id = nextId++;this.name = name;this.phone = phone;}
}

2.2 RandomUtil.ets

const names = ['張偉','王芳','李娜','劉強','陳軍','楊洋','趙麗','黃勇','周雪','吳宇','徐鵬','馬麗','孫建','朱敏','郭濤','曹梅','田亮','林靜','范磊'
];//隨機抽取一個姓名
export function getRandomName() {let randomIndex = Math.floor(Math.random() * names.length);return names[randomIndex];
}//隨機生成一個年齡
export function getRandomAge() {return 10 + Math.floor(Math.random() * 30);
}//隨機生成一個手機號碼
export function getRandomPhone() {const prefixArray = ['130', '131', '132', '133', '134', '135', '136', '137', '138', '139'];let phone = prefixArray[Math.floor(Math.random() * prefixArray.length)];// 生成后8位隨機數字for (let i = 0; i < 8; i++) {phone += Math.floor(Math.random() * 10);}return phone;
}

2.3 ContactList.ets

import { getRandomName, getRandomPhone } from '../../../../utils/RandomUtil';
import { Person } from './model/DataModel';@Entry
@Component
struct ContactsPage {// 初始化列表數據@State persons: Person[] = [new Person(getRandomName(), getRandomPhone()), new Person(getRandomName(), getRandomPhone())];// 點擊名片展開的 id@State isOpenId: number = -1;// 是否選中@State isShowCheck: boolean = false;// 選中的名片 ID@State selectIdList: number[] = [];build() {Column() {//標題Row({ space: 10 }) {Text('聯系人').titleStyle()Blank()/*** 通過 isShowCheck 控制 選擇和取消 按鈕的切換*/Button(this.isShowCheck ? '取消' : '選擇').buttonStyle(Color.Gray).onClick(() => {this.isShowCheck = !this.isShowCheck})Button('+').buttonStyle(Color.Gray)/*** 點擊新增 新增聯系人*/.onClick(() => {this.persons.push(new Person(getRandomName(), getRandomPhone()))})}.width('100%').height(60)//列表List({ space: 10 }) {ForEach(this.persons, (person: Person) => {ListItem() {// 聯系人組件ContactItem({person: person,isOpenId: $isOpenId,isShowCheck: this.isShowCheck,selectIdList: $selectIdList })}})}.width('100%').layoutWeight(1)//按鈕if (this.isShowCheck) {Button('刪除').buttonStyle(Color.Red).margin({ top: 10 }).onClick(() => {this.persons = this.persons.filter(person => !this.selectIdList.includes(person.id));})}}.width('100%').height('100%').backgroundColor('#EFEFEF').padding(10)}
}@Component
struct ContactItem {@ObjectLink person: Person;  // 雙向綁定父組件的 person 對象@State isShowPhone: boolean = false;  // 定義是否展示 phone@Link @Watch("numberChanger") isOpenId: number;   // 監聽點擊打開的名片 實現只能打開一個 再打開會關閉其他名片@Prop isShowCheck: boolean; // 接收父組件的值是否選中@Link selectIdList: number[]  // 綁定父組件的選中 ID 列表/*** 監聽函數* 監聽當前選中的名片 id 是否為點擊的名片 id*/numberChanger() {this.person.id == this.isOpenId ? this.isShowPhone = true : this.isShowPhone = false;}build() {Column() {Row({ space: 10 }) {if (this.isShowCheck) {Toggle({type: ToggleType.Checkbox})/*** 刪除函數* 當被選中時 將名片 id 添加到 綁定父組件的selectIdList中* 當未選中時 移除綁定父組件的selectIdList中的 名片 id*/.onChange((value) => {value ? this.selectIdList.push(this.person.id) : this.selectIdList.slice(this.selectIdList.indexOf(this.person.id), 1)})}//頭像Image($r('app.media.img_user_avatar')).width(40).height(40)//姓名Text(this.person.name).fontSize(20).fontWeight(500)Blank()//收藏/*** 雙向綁定父組件的 person 對象中的 person.isStar 判斷是否收藏*/Image(this.person.isStar ? $r('app.media.ic_star_filled') : $r('app.media.ic_star_empty')).width(30).height(30).onClick(() => {this.person.isStar = !this.person.isStar;})}.justifyContent(FlexAlign.SpaceBetween).padding(10).width("100%")/*** 點擊* 1、改變展示名片 手機號* 2、記錄正在展示的名片 id 用于給 numberChanger() 監聽函數判斷是否是當前名片展開 如果是則關閉其他名片*/.onClick(() => {this.isShowPhone = !this.isShowPhone;this.isOpenId = this.person.id;})if (this.isShowPhone) {Divider()Row() {Text(this.person.name).fontSize(20)Text(this.person.phone).fontSize(20).margin({ left: 20 })}.backgroundColor(Color.White).width('100%').height(70).padding(10).borderRadius(10)}}.backgroundColor(Color.White).padding(10).borderRadius(10)}
}/*** 一些 css 樣式*/@Extend(Text) function titleStyle() {.fontSize(30).fontWeight(500)
}@Extend(Button) function buttonStyle(color: ResourceColor) {.height(30).backgroundColor(color)
}

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

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

相關文章

百度、谷歌、必應收錄個人博客網站

主要是給各個搜索引擎提交你的sitemap文件&#xff0c;讓別人能搜到你博客的內容。 主題使用的Butterfly。 生成sitemap 安裝自動生成sitemap插件。 npm install hexo-generator-sitemap --save npm install hexo-generator-baidu-sitemap --save在站點配置文件_config.yml…

【手撕數據結構】卸甲時/空間復雜度

目錄 前言時間復雜度概念?O的漸進表?法小試牛刀 空間復雜度 前言 要想知道什么是空/時間復雜度,就得知道什么是數據結構。 這得分兩層來理解。我們生活中處處存在數據&#xff0c;什么抖音熱點上的國際大事&#xff0c;什么懂的都懂的雍正卸甲等等一系列我們用戶看得到的&a…

鴻蒙語言基礎類庫:【@ohos.url (URL字符串解析)】

URL字符串解析 說明&#xff1a; 本模塊首批接口從API version 7開始支持。后續版本的新增接口&#xff0c;采用上角標單獨標記接口的起始版本。開發前請熟悉鴻蒙開發指導文檔&#xff1a;gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md點擊或者復制轉到。 導入…

【K8s】專題六(5):Kubernetes 穩定性之重啟策略、滾動更新策略

以下內容均來自個人筆記并重新梳理&#xff0c;如有錯誤歡迎指正&#xff01;如果對您有幫助&#xff0c;煩請點贊、關注、轉發&#xff01;歡迎掃碼關注個人公眾號&#xff01; 目錄 一、重啟策略 1、基本介紹 2、資源清單&#xff08;示例&#xff09; 二、滾動更新策略 …

Vue框架引入

vue簡介 1.1.vue是什么?Vue官網 英文官網: https://vuejs.org/中文官網: https://cn.vuejs.org/ vue是一套構建用戶界面的漸進式javascript框架 構建用戶界面:將我們手里拿到的數據通過某種辦法變成用戶可以看見的界面前端工程師的職責:就是在合適的時候發出合適的請求,然后…

展開說說:Android服務之bindService解析

前面兩篇文章我們分別總結了Android四種Service的基本使用以及源碼層面總結一下startService的執行過程&#xff0c;本篇繼續從源碼層面總結bindService的執行過程。 本文依然按著是什么&#xff1f;有什么&#xff1f;怎么用&#xff1f;啥原理&#xff1f;的步驟來分析。 b…

Splunk Enterprise 任意文件讀取漏洞(CVE-2024-36991)

文章目錄 前言漏洞描述影響版本漏洞復現POC批量檢測-nuclei腳本 修復建議 前言 Splunk Enterprise 是一款強大的機器數據管理和分析平臺&#xff0c;能夠實時收集、索引、搜索、分析和可視化來自各種數據源的日志和數據&#xff0c;幫助企業提升運營效率、增強安全性和優化業務…

數據庫作業3

DELETE FROM student WHERE grade IS NULL; 一、數據庫操作部分 1. 向 student 表中添加一條新記錄&#xff1a; INSERT INTO student (id, name, grade) VALUES (1, monkey, 98.5); 2. 向 student 表中添加多條新記錄&#xff1a; INSERT INTO student (id, name, grade) V…

【MYSQL】如何解決 bin log 與 redo log 的一致性問題

該問題問的其實就是redo log 的兩階段提交 為什么說redo log 具有崩潰恢復的能力 MySQL Server 層擁有的 bin log 只能用于歸檔&#xff0c;不足以實現崩潰恢復&#xff08;crash-safe&#xff09;&#xff0c;需要借助 InnoDB 引擎的 redo log 才能擁有崩潰恢復的能力。所謂崩…

PHP的發展歷程以及功能使用場景

PHP的發展歷程 PHP的發展歷程可以追溯到1994年&#xff0c;由丹麥計算機程序員拉斯穆斯勒多夫&#xff08;Rasmus Lerdorf&#xff09;出于個人網站統計訪問者信息的需求而創建。以下是PHP發展歷程中的幾個重要里程碑&#xff1a; 初創階段&#xff08;1994-1995年&#xff09…

二刷力扣——單調棧

739. 每日溫度 單調棧應該從棧底到棧頂 是遞減的。 找下一個更大的 &#xff0c;用遞減單調棧&#xff0c;就可以確定在棧里面的每個比當前元素i小的元素&#xff0c;下一個更大的就是這個i&#xff0c;然后彈出并記錄&#xff1b;然后當前元素i入棧&#xff0c;仍然滿足遞減…

數學基礎 -- 三角學

三角學 三角學&#xff08;Trigonometry&#xff09;是數學的一個分支&#xff0c;主要研究三角形的邊長與角度之間的關系。三角學在幾何學、物理學、工程學等多個領域中有廣泛的應用。以下是三角學的一些基本概念和公式&#xff1a; 基本概念 直角三角形&#xff1a;一個角…

Java進階----繼承

繼承 一.繼承概述 繼承是可以通過定義新的類&#xff0c;在已有類的基礎上擴展屬性和功能的一種技術. 案例&#xff1a;優化 貓、狗JavaBean類的設計 狗類&#xff1a;Dog 屬性&#xff1a;名字 name&#xff0c;年齡 age 方法&#xff1a;看家 watchHome()&#xff0c;Gett…

防抖和字節流

防抖&#xff08;Debouncing&#xff09;和字節流&#xff08;Byte Stream&#xff09;是兩個不同的概念&#xff0c;分別在編程和數據傳輸領域中使用。 防抖&#xff08;Debouncing&#xff09; 防抖是一種在前端開發中常用的技術&#xff0c;用于控制事件處理函數的執行頻率…

Android多開應用軟件系統設計

設計一個支持Android多開應用的軟件系統&#xff0c;主要涉及到以下幾個關鍵技術點和設計考慮&#xff1a; 1. 虛擬化技術 容器技術&#xff1a;與傳統的虛擬機不同&#xff0c;可以采用更輕量級的容器技術&#xff0c;為每個應用實例創建獨立的運行環境。這包括分配獨立的用…

Ubuntu配置sendmail client,用sendmail命令來發送郵件

參考文檔 https://mailoutgoing.com/support/mailrelay/sendmail.html https://www.sendmail.org/~ca/email/auth.html https://docs.oracle.com/en/operating-systems/oracle-linux/6/admin/configure-sendmail.html 總結 1、ubuntu環境下&#xff0c;sendmail服務位于/etc/i…

HTTP 請求走私漏洞詳解

超詳細的HTTP請求走私漏洞教程&#xff0c;看完還不會你來找我。 1. 簡介 HTTP請求走私漏洞&#xff08;HTTP Request Smuggling&#xff09;發生在前端服務器&#xff08;也稱代理服務器&#xff0c;一般會進行身份驗證或訪問控制&#xff09;和后端服務器在解析HTTP請求時&…

上位機圖像處理和嵌入式模塊部署(mcu項目2:串口日志記錄器)

【 聲明&#xff1a;版權所有&#xff0c;歡迎轉載&#xff0c;請勿用于商業用途。 聯系信箱&#xff1a;feixiaoxing 163.com】 淘寶上面有一個商品蠻好玩的&#xff0c;那就是日志記錄器。說是記錄器&#xff0c;其實就是一個模塊&#xff0c;這個模塊的輸入是一個ttl串口&am…

利用Python進行數據分析PDF下載經典數據分享推薦

本書由Python pandas項目創始人Wes McKinney親筆撰寫&#xff0c;詳細介紹利用Python進行操作、處理、清洗和規整數據等方面的具體細節和基本要點。第2版針對Python 3.6進行全面修訂和更新&#xff0c;涵蓋新版的pandas、NumPy、IPython和Jupyter&#xff0c;并增加大量實際案例…

Docker Desktop如何換鏡像源?

docker現在很多鏡像源都出現了問題,導致無法拉取鏡像,所以找到一個好的鏡像源,尤為重要。 一、阿里鏡像源 經過測試,目前,阿里云鏡像加速地址還可以使用。如果沒有阿里云賬號,需要先注冊一個賬號。 地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 二…