当前位置: 首页 > news >正文

arkTS:持久化储存UI状态的基本用法(PersistentStorage)

arkUI:持久化储存UI状态的基本用法(PersistentStorage)

  • 1 主要内容说明
  • 2 例子
    • 2.1 持久化储存UI状态的基本用法(PersistentStorage)
      • 2.1.1 源码1的相关说明
        • 2.1.1.1 数据存储
        • 2.1.1.2 数据读取
        • 2.1.1.3 动态更新
        • 2.1.1.4 显示数据
      • 2.1.2 源码1 (持久化储存)
      • 2.1.3 源码1运行效果
        • 2.1.3.1 效果视频
        • 2.1.3.2 效果截图
          • 2.1.3.2.1 默认情况下
          • 2.1.3.2.2 点击按钮第一下
          • 2.1.3.2.3 点击按钮第二下
          • 2.1.3.2.4 点击按钮第三下
          • 2.1.3.2.5 退出程序
          • 2.1.3.2.6 重新进入程序
  • 3.结语
  • 4.定位日期

1 主要内容说明

持久化存储 (PersistentStorage) ,它提供了一种将数据保存到磁盘的机制,使得数据在应用关闭后仍能被保留和访问。通过调用 PersistentStorage.persistProp 方法,可以将各种类型的数据(如数字、字符串、布尔值以及复杂对象)存储起来。例如,代码中存储了用户的年龄、名字、布尔状态,以及包含多个属性的用户信息对象。这些存储的数据会与磁盘同步,确保数据的持久性。

关于后面源码1的内容,为了方便使用,代码通过 @StorageLink 装饰器将持久化存储的数据绑定到组件的属性中。例如,@StorageLink(“age”) 将磁盘中的 age 数据直接关联到组件的 age 属性。这种绑定方式的优势在于,属性值的变化会自动更新到存储中,反之亦然。

此外,源码1还展示了如何动态更新持久化数据。通过按钮点击事件,代码修改了存储中的多个值,例如年龄递增、字符串追加、布尔值变更,以及对象属性的更新。更新后的值会立即反映在存储中,并通过绑定属性实时同步到用户界面。也就是说点击后的效果会一直保持,退出程序后再进入程序,显示的也是上次退出前的状态。对比,若不使用持久化储存,每次关闭程序后再打开,显示的都是初始默认情况的画面,并不会储存上传退出前的状态。

2 例子

2.1 持久化储存UI状态的基本用法(PersistentStorage)

2.1.1 源码1的相关说明

2.1.1.1 数据存储

使用 PersistentStorage.persistProp 方法将各种类型的数据(数值、字符串、布尔值和对象)持久化存储到磁盘,例如:

	数字:PersistentStorage.persistProp("age", 22)字符串:PersistentStorage.persistProp("name", "jack")布尔值:PersistentStorage.persistProp("bool", true)对象:PersistentStorage.persistProp("UserMessage", {...})
2.1.1.2 数据读取

使用 @StorageLink 装饰器将存储的数据绑定到组件的属性中,数据会在组件中自动更新。如:

	@StorageLink("age") age: number = 0; 通过 "age" 属性访问存储的年龄。
2.1.1.3 动态更新

通过点击按钮,更新存储的值,并实时同步到 UI,例如:

	年龄自增:this.age += 1;更新对象中的字段:this.myUserMessage.age += 2;
2.1.1.4 显示数据

将存储的值通过 UI 元素(如 Text)展示出来,并支持 JSON 格式化显示对象。

2.1.2 源码1 (持久化储存)

// 定义用户信息的接口,包含名字、年龄、身高三个属性
export interface User_Message {name: string;  // 用户的名字age: number;   // 用户的年龄height: number; // 用户的身高
}// 使用 PersistentStorage 初始设置磁盘存储的值
// 数值类型存储:年龄
PersistentStorage.persistProp("age", 22);// 字符串类型存储:名字
PersistentStorage.persistProp("name", "jack");// 布尔类型存储:一个布尔值
PersistentStorage.persistProp("bool", true);// 对象类型存储:存储用户信息对象,遵循 User_Message 接口
PersistentStorage.persistProp("UserMessage", { name: "jack", age: 23, height: 168 } as User_Message);@Entry
@Component
struct Page_PersistentStorage {// 将存储的值链接到组件属性@StorageLink("age")age: number = 0; // 默认值为0@StorageLink("name")name: string = ""; // 默认值为空字符串@StorageLink("bool")bool: boolean = false; // 默认值为 false@StorageLink("UserMessage")myUserMessage: User_Message = {} as User_Message; // 默认值为空对象,类型为 User_Messagebuild() {Column() {// 显示存储的年龄(number 类型)Text("储存的年龄age,number类:")Text(this.age + "").backgroundColor("#fcc").fontSize(30).margin({ bottom: 30, top: 10 });// 显示存储的名字(string 类型)Text("储存的名字name,string类:")Text(this.name + "").backgroundColor("#ff4bd94b").fontSize(30).margin({ bottom: 30, top: 10 });// 显示存储的布尔值Text("储存的布尔值bool,boolean类:")Text(this.bool + "").backgroundColor("#ff4798fa").fontSize(30).margin({ bottom: 30, top: 10 });// 显示存储的用户信息(对象类型)Text("储存的个人信息,自 User_Message 类:")Text(JSON.stringify(this.myUserMessage)) // 使用 JSON.stringify 显示对象内容.backgroundColor("#ffe3e349").fontSize(30).margin({ bottom: 30, top: 10 });// 按钮用于更改存储值Button("点击变换").onClick(() => {// 每次点击年龄加1this.age += 1;// 名字追加【-GO-】this.name += "【-GO-】";// 布尔值变为 falsethis.bool = false;// 更新用户信息对象this.myUserMessage.name += "【-go-】";this.myUserMessage.age += 2;this.myUserMessage.height += 10;});// 说明点击按钮后数据的变化Text(` --age++ \n --name += 【-GO-】 \n --bool =false \n --对象类:名字+【-go-】,年龄+2,身高+10`);}.height("100%") // 列组件的高度设置为全屏.width("100%"); // 列组件的宽度设置为全屏}
}

2.1.3 源码1运行效果

2.1.3.1 效果视频
  • 视频效果

PersistentStorage持久化储存的基本使用

2.1.3.2 效果截图
2.1.3.2.1 默认情况下
  • 运行程序默认情况下
    在这里插入图片描述
2.1.3.2.2 点击按钮第一下
  • 点击 “点击变换” 摁钮第一下
    在这里插入图片描述
2.1.3.2.3 点击按钮第二下
  • 点击 “点击变换” 摁钮第二下
    在这里插入图片描述
2.1.3.2.4 点击按钮第三下
  • 点击 “点击变换” 摁钮第三下
    在这里插入图片描述
2.1.3.2.5 退出程序
  • 使用手机的手势,摁住页面上滑退出,或如下图点击退出
    在这里插入图片描述
2.1.3.2.6 重新进入程序
  • 点击模拟器应用重新进入程序
    在这里插入图片描述
  • 进入程序后的效果,内容还是之前点击三次以后的状态。若不使用持久化储存,每次关闭应用后再此打开应用都会为前面 默认情况下 的运行效果
    在这里插入图片描述

3.结语

持久化存储 (PersistentStorage) 为轻量级的储存方式,若想对于庞大的数据内容进行储存,还是得使用数据库的储存方式。本文关于持久化储存只是简单的逻辑结构的编写记录,目的在于我们先了解持久化储存的基本格式,以后再逐步添加复杂的用法。

持久化PersistentStorage的相关的内容,华为官方的指南地址:PersistentStorage:持久化存储UI状态

由于笔者的能力有限,创作的内容有所不足在所难免,也敬请读者包涵和指出,万分感谢!

4.定位日期

待视频审核通过;
2024-11-30;
10:48;

2024-11-30;
11:07;

相关文章:

arkTS:持久化储存UI状态的基本用法(PersistentStorage)

arkUI:持久化储存UI状态的基本用法(PersistentStorage) 1 主要内容说明2 例子2.1 持久化储存UI状态的基本用法(PersistentStorage)2.1.1 源码1的相关说明2.1.1.1 数据存储2.1.1.2 数据读取2.1.1.3 动态更新2.1.1.4 显示…...

css—动画

一、背景 本文章是用于解释上一篇文章中的问题,如果会动画的小伙伴就不用再次来看了,本文主要讲解一下动画的设定规则,以及如何在元素中添加动画,本文会大篇幅的讲解一下,动画属性。注意,这是css3的内容&am…...

YOLO系列论文综述(从YOLOv1到YOLOv11)【第12篇:YOLOv9——可编程梯度信息(PGI)+广义高效层聚合网络(GELAN)】

YOLOv9 1 摘要2 改进点3 网络架构 YOLO系列博文: 【第1篇:概述物体检测算法发展史、YOLO应用领域、评价指标和NMS】【第2篇:YOLO系列论文、代码和主要优缺点汇总】【第3篇:YOLOv1——YOLO的开山之作】【第4篇:YOLOv2—…...

【ETCD】etcd简单入门之基础操作基于etcdctl进行操作

这里将使用etcdctl命令行工具来进行演示&#xff0c; 1、使用put命令向etcd写入kv对 使用etcdctl put命令来设置键值对。put命令接受两个参数&#xff1a;键和值 使用方法&#xff1a; NAME:put - Puts the given key into the storeUSAGE:etcdctl put [options] <key&g…...

第六届国际科技创新(IAECST 2024)暨第四届物流系统与交通运输(LSTT 2024)

重要信息 会议官网&#xff1a;www.lstt.org 大会时间&#xff1a;2024年12月6-8日 大会地点&#xff1a;中国-广州 简介 第六届国际科技创新暨第四届物流系统与交通运输国际&#xff08;LSTT 2024&#xff09;将于2024年12月6-8日在广州举办&#xff0c;这是一个集中探讨…...

20241127 给typecho文章编辑附件 添加视频 图片预览

Typecho在写文章时&#xff0c;如果一次性上传太多张图片可能分不清哪张&#xff0c;因为附件没有略缩图&#xff0c;无法实时阅览图片&#xff0c;给文章插入图片时很不方便。 编辑admin/file-upload.php 大约十八行的位置 一个while 循环里面,这是在进行html元素更新操作,在合…...

vue3使用monaco编辑器(VSCode网页版)

vue3使用monaco编辑器&#xff08;VSCode网页版&#xff09; 文章说明参考文章核心代码效果展示实践说明源码下载 文章说明 一直在找网页版的编辑器&#xff0c;网页版的VSCode功能很强大&#xff0c;这个monaco就是VSCode样式的编辑器&#xff0c;功能很强大&#xff0c;可以直…...

Spark优化--开发调优、资源调优、数据倾斜调优和shuffle调优等

针对Spark优化&#xff0c;我们可以从多个角度进行&#xff0c;包括开发调优、资源调优、数据倾斜调优和shuffle调优等。以下是一些具体的优化方法&#xff1a; 1. 开发调优 避免创建重复的RDD&#xff1a;对于同一份数据&#xff0c;只应该创建一个RDD&#xff0c;避免创建多…...

Day1 生信新手笔记

生信新手笔记 生信学习第一天笔记打卡。 转录组学中&#xff1a; 上游分析-基于linux&#xff0c;包括质控、过滤、比对、定量&#xff1b; 下游分析-基于R语言&#xff0c;包括差异分析、富集分析、可视化。 1. 级别标题 一个井号加空格 就是一级标题&#xff0c;两个井号加…...

Python的秘密基地--[章节2]Python核心数据结构

第2章&#xff1a;Python核心数据结构 Python中的数据结构提供了强大的工具来存储和操作数据。理解这些数据结构是Python编程的基础。 2.1 列表&#xff08;List&#xff09; 2.1.1 什么是列表 列表是一种有序的可变序列&#xff0c;用于存储一组数据。它支持多种类型的数据…...

【Electron学习笔记(三)】Electron的主进程和渲染进程

Electron的主进程和渲染进程 Electron的主进程和渲染进程前言正文1、主进程2、渲染进程3、Preload 脚本3.1 在项目目录下创建 preload.js 文件3.2 在 main.js 文件下创建路径变量并将 preload.js 定义为桥梁3.3 在 preload.js 文件下使用 electron 提供的contextBridge 模块3.4…...

[免费]SpringBoot+Vue景区订票(购票)系统【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue大景区订票(购票)系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue景区订票(购票)系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 现代经济快节奏发展以及不断完善升级的信息…...

idea_工程与模块管理

module相关操作 项目结构新建module移除模块删除模块导入模块 项目结构 层级关系 project(工程) - module(模块) - package(包) - class(类) 在 IntelliJ IDEA 中Project是最顶级的结构单元 &#xff0c;然后就是Module。目前&#xff0c;主流的大型项目结构基本都是多Module…...

A02、Java 设计模式优化

1、单例模式 1.1、什么是单例模式 它的核心在于&#xff0c;单例模式可以保证一个类仅创建一个实例&#xff0c;并提供一个访问它的全局访问点。该模式有三个基本要点&#xff1a;一是这个类只能有一个实例&#xff1b;二是它必须自行创建这个实例&#xff1b;三是它必须自行向…...

jdk8没有Buffer.put()

在Java中&#xff0c;Buffer是一个抽象类&#xff0c;它定义了缓冲区的通用行为。不过&#xff0c;Buffer本身并没有直接提供put()方法。put()方法是在Buffer的子类中定义的&#xff0c;比如ByteBuffer、CharBuffer、ShortBuffer、IntBuffer、LongBuffer、FloatBuffer和DoubleB…...

Artec Leo:航海设备维护的便携式3D扫描利器【沪敖3D】

挑战&#xff1a;海军服务提供商USP Maritime需要CAD数据来执行维修和改装任务&#xff0c;特别是在偏远地区的任务&#xff0c;以及原始设计丢失的情况下。 解决方案&#xff1a;Artec Leo, Artec Studio, Autodesk Inventor 效果&#xff1a;高精度船舶组件和船坞机械模型&…...

HCIA笔记6--路由基础

0. 概念 自治系统&#xff1a;一个统一管理的大型网络&#xff0c;由路由器组成的集合。 路由器隔离广播域&#xff0c;交换机隔离冲突域。 1.路由器工作原理 路由器根据路由表进行转发数据包&#xff1b; 路由表中没有路由&#xff0c;直接丢弃该数据包路由表中只有一条路…...

说说Elasticsearch拼写纠错是如何实现的?

大家好&#xff0c;我是锋哥。今天分享关于【说说Elasticsearch拼写纠错是如何实现的&#xff1f;】面试题。希望对大家有帮助&#xff1b; 说说Elasticsearch拼写纠错是如何实现的&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Elasticsearch 中&…...

Ubuntu20.04运行R-VIO2

目录 1.环境配置2.构建项目3. 运行 VIO 模式4.结果图 1.环境配置 CMakeLists.txt中 C 使用 14、opencv使用4 2.构建项目 克隆代码库&#xff1a; 在终端中执行以下命令克隆项目&#xff1a;git clone https://github.com/rpng/R-VIO2.git编译项目&#xff1a; 使用 catkin_m…...

【软件项目测试文档大全】软件测试方案,验收测试计划,验收测试报告,测试用例,集成测试,测试规程和指南,等保测试(Word原件)

1. 引言 1.1. 编写目的 1.2. 项目背景 1.3. 读者对象 1.4. 参考资料 1.5. 术语与缩略语 2. 测试策略 2.1. 测试完成标准 2.2. 测试类型 2.2.1. 功能测试 2.2.2. 性能测试 2.2.3. 安全性与访问控制测试 2.3. 测试工具 3. 测试技术 4. 测试资源 4.1. 人员安排 4.…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error

在前端开发中&#xff0c;JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作&#xff08;如 Promise、async/await 等&#xff09;&#xff0c;开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝&#xff08;r…...

tomcat指定使用的jdk版本

说明 有时候需要对tomcat配置指定的jdk版本号&#xff0c;此时&#xff0c;我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...

DAY 26 函数专题1

函数定义与参数知识点回顾&#xff1a;1. 函数的定义2. 变量作用域&#xff1a;局部变量和全局变量3. 函数的参数类型&#xff1a;位置参数、默认参数、不定参数4. 传递参数的手段&#xff1a;关键词参数5 题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一…...