ArkTS--应用状态
应用状态
应用状态相关的内容需要使用模拟器或真机调试,在API 11开始也支持preview
1.LocalStorage
LocalStorage是页面级的UI状态存储,通过@Entry装饰器接收参数可以在页面内共享数据
1.1 页面内共享数据
import {MyUser} from '../model/MyUser'
//用户对象
let user:MyUser = {name:'jack',age:18}
//存储的对象
let para:Record<string,MyUser> = {'user':user}
//创建LocalStorage对象
const storage = new LocalStorage(para);
@Entry(storage) //需要将共享的对象放入到@Entry中
@Component
struct LocalStoragePage {//获取到key是user的对象@LocalStorageProp('user') user:MyUser = {}build() {Column({space:20}){Text(this.user.name + ' ----- ' + this.user.age)Divider()ChildA()Divider()ChildB()}}
}@Component
struct ChildA {//获取到key是user的对象@LocalStorageProp('user') user:MyUser = {}build() {Column(){Text('ChildA--->' + this.user.name + ' ----- ' + this.user.age).onClick(()=>{//断言this.user.age不为undefinedthis.user.age = this.user.age as numberthis.user.age++})}}
}@Component
struct ChildB {//获取到key是user的对象@LocalStorageProp('user') user:MyUser = {}build() {Column(){Text('ChildB--->' + this.user.name + ' ----- ' + this.user.age).onClick(()=>{//断言this.user.age不为undefinedthis.user.age = this.user.age as numberthis.user.age++})}}
}
1.2 页面间共享数据
在UIAbility创建LocalStorage通过
loadContent提供给加载的窗口
第一步
src/main/ets/entryability/EntryAbility.ets
export class MyUser{name?:stringage?:number
}
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { window } from '@kit.ArkUI';
import {MyUser} from '../model/MyUser'export default class EntryAbility extends UIAbility {//用户对象user:MyUser = {name:'jack',age:18}//存储的对象para:Record<string,MyUser> = {'user':this.user}//创建LocalStorage对象storage:LocalStorage = new LocalStorage(this.para)//注意:windowStage.loadContent中要加载storagewindowStage.loadContent('pages/Index',this.storage, (err) => {if (err.code) {hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');return;}hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.');});}
}
Index.ets
import {MyUser} from '../model/MyUser'
//获取LocalStorage对象
const storage = LocalStorage.getShared()
@Entry(storage)
@Component
struct Index {//获取到key是user的对象@LocalStorageProp('user') user:MyUser = {}build() {Column(){Text(this.user.name + ' ----- ' + this.user.age)Text(JSON.stringify(this.user))}}
}
2.AppStorage
AppStorage是在应用启动的时候会被创建的单例。它的目的是为了提供应用状态数据的中心存储,这些状态数据在应用级别都是可访问的。AppStorage将在应用运行过程保留其属性。属性通过唯一的键字符串值访问
2.1 通过UI装饰器使用
AppStroage是应用全局的UI状态存储,是和应用的进程绑定的,由UI框架在应用程序创建的时候创建,为应用程序UI状态属性提供了中央存储。
- 如果初始化使用
AppStorage.setOrCreate(key,value)- 单向@StorageProp(key),组件内的值不变的
- 双向@StorageLink(key) ,全局值均可变
import {MyUser} from '../model/MyUser'
//创建AppStorage
AppStorage.setOrCreate('user',{name:'jacklove',age:18})@Entry
@Component
struct AppStoragePage {//获取// @StorageProp('user') user:MyUser = {}@StorageLink('user') user:MyUser = {}build() {Column(){Text(`用户名:${this.user.name},年龄:${this.user.age}`).onClick(() => {this.user.age = this.user.age as number;//断言它是number类型this.user.age++});ChildC()}}
}@Component
struct ChildC {//获取// @StorageProp('user') user:MyUser = {}@StorageLink('user') user:MyUser = {}build() {Text(`ChildC ---> 用户名:${this.user.name},年龄:${this.user.age}`).onClick(() => {this.user.age = this.user.age as number;//断言它是number类型this.user.age++})}
}
2.2 通过逻辑使用
- AppStorage.Get(key) 获取数据
- AppStorage.Set(key,value) 覆盖数据
- const user:SubscribedAbstractProperty = AppStorage.link(‘user’) 根据属性获取属性的值
- link.set(value) 修改值
- link.get() 获取值
import {MyUser} from '../model/MyUser'
import promptAction from '@ohos.promptAction'AppStorage.setOrCreate<MyUser>('user',{name:'rose',age:20})@Entry
@Component
struct AppStroage2Page {@StorageLink('user') user:MyUser = {}build() {Column({space:30}){Text('Get').onClick(()=>{//只做数据的获取const user = AppStorage.get<MyUser>('user');promptAction.showToast({message:JSON.stringify(user)})console.log('hsy',JSON.stringify(user))})Text('Set').onClick(() => {//只做数据的设置AppStorage.set<MyUser>('user',{name:'jack爱',age:30})})Text('Link').onClick(() => {//取出对象中的属性值,取出了userconst user:SubscribedAbstractProperty<MyUser> = AppStorage.link('user')user.set({name:'蔡徐坤',age:26})})}}
}
相关文章:
ArkTS--应用状态
应用状态 应用状态相关的内容需要使用模拟器或真机调试,在API 11开始也支持preview 1.LocalStorage LocalStorage是页面级的UI状态存储,通过Entry装饰器接收参数可以在页面内共享数据 1.1 页面内共享数据 import {MyUser} from ../model/MyUser //用户对…...
yolov8涨点系列之引入CBAM注意力机制
文章目录 YOLOv8 中添加注意力机制 CBAM 具有多方面的好处特征增强与选择通道注意力方面空间注意力方面 提高模型性能计算效率优化: yolov8增加CBAM具体步骤CBAM代码(1)在__init.pyconv.py文件的__all__内添加‘CBAM’(2)conv.py文件复制粘贴CBAM代码(3)修改task.py…...
java标准JavaBean类
1. public class test {//属性private String username;private String password;private String email;private String gender;private int age;//快捷键//altinsert//altFninsert//插件PTG1秒生成标准Javabean //插件ptg c//空参public test() {}//全部参数…...
MATLAB界面设计全攻略:从基础入门到高级应用
引言 MATLAB作为一种功能强大的科学计算软件,不仅可以进行各种复杂的数值计算,还可以通过其图形用户界面设计工具(GUI)为用户提供可视化操作界面。本教程旨在详细介绍MATLAB界面设计的全过程,为初学者提供从入门到精通…...
JavaScript API部分知识点
一、Dom获取&属性操作 (一)、 Web API 基本认知 1、变量声明 const 声明的值不能更改,而且const声明变量的时候需要里面进行初始化 但是对于引用数据类型,const声明的变量,里面存的不是 值,是 地址…...
钉钉调试微应用整理2
第一步 新建应用 钉钉开放平台](https://open-dev.dingtalk.com/) 去新增应用 第二步 配置应用信息 把本地代码运行起来,并设置本地地址 第三步 在本地代码添加调试命令 这里有2中添加方式 哪一种都可以 方式一: index.html页面中 <!DOCTYPE h…...
C++初级入门(1)
第一部分 基础语法入门 一、基础 1、变量与常量 1、变量 变量存在的意义:方便管理内存空间 2、常量 用于记录程序中不可更改的数据 #define 常量名 常量值 const 数据类型 常量名常量值 ; 2、数据类型 1、整型 short 2字节 int 4字节 long Wi…...
group_concat配置影响程序出bug
在 ThinkPHP 5 中,想要临时修改 MySQL 数据库的 group_concat_max_len 参数,可以使用 原生 SQL 执行 来修改该值。你可以通过 Db 类来执行 SQL 语句,从而修改会话(Session)级别的变量。 步骤 设置 group_concat_max_l…...
将Go项目编译为可执行文件(windows/linux)
windows 编译成windows环境exe可执行文件过程,打开文件所在目录,在资源路径框中输入cmd,打开cmd命令框,通过“go env”查看当期环境变量,以windows10环境为例,默认为windows环境。 // 配置环境变量 SET C…...
IMS高压发生器维修高压电源维修XRG100/1000
IMS高压发生器的硬件组成: 高压控制发生器主要由高压发生器和高压控制器两部分组成。高压控制器是控制调节X射线管管电压和管电流的机构,高压发生器是管电压和管电流产生的执行机构,通过高压控制器对高压发生器进行控制调节,通过高压电缆将高压发生器与X射线管连接…...
斯坦福泡茶机器人DexCap源码解析:涵盖收集数据、处理数据、模型训练三大阶段
前言 因为我司「七月在线」关于dexcap的复现/优化接近尾声了,故准备把dexcap的源码也分析下。下周则分析下iDP3的源码——为队伍「iDP3人形的复现/优化」助力 最开始,dexcap的源码分析属于此文《DexCap——斯坦福李飞飞团队泡茶机器人:带…...
RabbitMQ的DLX(Dead-Letter-Exchange 死信交换机,死信交换器,死信邮箱)(重要)
RabbitMQ的DLX 1、RabbitMQ死信队列2、代码示例2.1、队列过期2.1.1、配置类RabbitConfig(关键代码)2.1.2、业务类MessageService2.1.3、配置文件application.yml2.1.4、启动类2.1.5、配置文件2.1.6、测试 2.2、消息过期2.2.1、配置类RabbitConfig2.2.2、…...
【STM32F1】——舵机角度控制与TIM定时器
【STM32F1】——舵机角度控制与TIM定时器 一、简介 本篇主要对舵机DS-S002M模块调试过程进行总结,实现了以下功能: 1)舵机转动角度的控制:利用STM32F103C8T6的TIM定时器产生PWM信号控制舵机DS-S002M转动一定的角度。 二、DS-S002M数字舵机介绍 电压:4.8-6.0V操作角度:…...
想要成为独立游戏作者 :通关!游戏设计之道 2-1 HUD
HUD特指显示屏幕上的信息,在是UI的子集,UI是一个游戏中虽有的交互元素的总称 本文用了大量ai总结 + 个人微调,不喜勿喷,前篇如下想要成为独立游戏作者 :通关!游戏设计之道 1-4 操作篇-C…...
sql专题 之 三大范式
文章目录 背景范式介绍第一范式:属性不可再分第二范式第三范式注意事项 为什么不遵循后续的范式数据库范式在实际应用中会遇到哪些挑战? 背景 数据库的范式(Normal Form)是一组规则,用于设计数据库表结构以 减少数据冗…...
node.js安装和配置教程
软件介绍 Node.js是一个免费的、开源的、跨平台的JavaScript运行时环境,允许开发人员在浏览器之外编写命令行工具和服务器端脚本。 Node.js是一个基于Chrome JavaScript运行时建立的一个平台。 Node.js是一个事件驱动I/O服务端JavaScript环境,基于Goo…...
定时器输入捕获实验配置
首先,第一个时基工作参数配置 HAL_TIM_IC_Init( ) 还是一样的套路,传参是一个句柄,先定义一个结构体 Instance:指向TIM_TypeDef的指针,表示定时器的实例。TIM_TypeDef是一个包含了定时器寄存器的结构体,用…...
【C/C++】memcpy函数的使用
零.导言 当我们学习了strcpy和strncpy函数后,也许会疑惑整形数组要如何拷贝,而今天我将讲解的memcpy函数便可以拷贝整形数组。 一.memcpy函数的使用 memcpy函数是一种C语言内存函数,可以按字节拷贝任意类型的数组,比如整形数组。 …...
spring-security(两种权限控制方式)
案例(写死的用户密码) package com.zking.security.service;import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.AuthorityUtils; import org.springframework.security.core.userdetails.User; import org.sp…...
【mongodb】数据库的安装及连接初始化简明手册
NoSQL(NoSQL Not Only SQL ),意即"不仅仅是SQL"。 在现代的计算系统上每天网络上都会产生庞大的数据量。这些数据有很大一部分是由关系数据库管理系统(RDBMS)来处理。 通过应用实践证明,关系模型是非常适合于客户服务器…...
终极指南:掌握AMD Ryzen深度调试的完整解决方案
终极指南:掌握AMD Ryzen深度调试的完整解决方案 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitcode.…...
用手机遥控电脑演讲:开源项目Presentation-Control部署与实战指南
1. 项目概述与核心价值最近在准备一个重要的线上技术分享,过程中遇到了一个几乎所有演讲者都会头疼的问题:如何优雅地控制幻灯片播放,同时又能自如地操作电脑上的其他演示工具,比如代码编辑器、终端或者在线Demo?传统的…...
SM3国密算法实战:从原理到Java代码实现与数据完整性校验
1. SM3国密算法:你的数据安全守门人 第一次听说SM3算法时,我正在处理一个政府项目的投标文件加密需求。客户明确要求必须使用国密标准算法,当时我对这类算法还停留在"听说过但没用过"的阶段。经过两周的实战摸索,我发现…...
如何快速清理重复图片:AntiDupl.NET智能去重工具的完整指南
如何快速清理重复图片:AntiDupl.NET智能去重工具的完整指南 【免费下载链接】AntiDupl A program to search similar and defect pictures on the disk 项目地址: https://gitcode.com/gh_mirrors/an/AntiDupl 你是否曾因硬盘空间被重复图片悄无声息地吞噬而…...
3步搞定微信聊天记录导出:Mac用户必备的数据备份指南
3步搞定微信聊天记录导出:Mac用户必备的数据备份指南 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你是否担心珍贵的微信聊天记录因为手机丢失或系统升级而…...
VMware Unlocker:免费解锁VMware的macOS虚拟机支持终极指南
VMware Unlocker:免费解锁VMware的macOS虚拟机支持终极指南 【免费下载链接】unlocker VMware Workstation macOS 项目地址: https://gitcode.com/gh_mirrors/unloc/unlocker 想在Windows或Linux电脑上运行macOS虚拟机,却发现VMware根本不提供苹…...
叫不动下属、又不能裁?中层必看!不撕破脸、不内耗,3招拿捏摆烂员工
很多中层都有这样的困境:上面领导催进度,下面员工躺平摆烂,叫不动、推不动;想辞退,却因编制、合同等原因动不了,要么硬刚撕破脸,要么忍气吞声自己扛,内耗严重还没成效。 其实&#…...
告别Let‘s Encrypt:用开源XCA构建私有CA,签发全站浏览器信任的SSL证书
1. 为什么你需要私有CA? 每次看到浏览器里那个"不安全"的红色警告,我就浑身难受。以前我也和大家一样用Lets Encrypt,直到有次紧急发布时遇到证书续期失败,整个团队熬夜排查到凌晨三点。从那天起,我就开始研…...
ARMv8-A开发实战:DC IVAC指令详解,手把手教你正确清理数据缓存
ARMv8-A开发实战:DC IVAC指令深度解析与缓存一致性实战指南 在嵌入式系统开发中,缓存一致性问题是导致许多"幽灵bug"的罪魁祸首。当DMA控制器直接操作内存而处理器核心毫不知情,或者当多个核心共享同一块内存区域时,缓存…...
淘宝淘金币自动脚本:每天15分钟解放双手的终极指南
淘宝淘金币自动脚本:每天15分钟解放双手的终极指南 【免费下载链接】taojinbi 淘宝淘金币自动执行脚本,包含蚂蚁森林收取能量,芭芭农场全任务,解放你的双手 项目地址: https://gitcode.com/gh_mirrors/ta/taojinbi 淘宝淘金…...
