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

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--应用状态

应用状态 应用状态相关的内容需要使用模拟器或真机调试&#xff0c;在API 11开始也支持preview 1.LocalStorage LocalStorage是页面级的UI状态存储&#xff0c;通过Entry装饰器接收参数可以在页面内共享数据 1.1 页面内共享数据 import {MyUser} from ../model/MyUser //用户对…...

yolov8涨点系列之引入CBAM注意力机制

文章目录 YOLOv8 中添加注意力机制 CBAM 具有多方面的好处特征增强与选择通道注意力方面空间注意力方面 提高模型性能计算效率优化&#xff1a; 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作为一种功能强大的科学计算软件&#xff0c;不仅可以进行各种复杂的数值计算&#xff0c;还可以通过其图形用户界面设计工具&#xff08;GUI&#xff09;为用户提供可视化操作界面。本教程旨在详细介绍MATLAB界面设计的全过程&#xff0c;为初学者提供从入门到精通…...

JavaScript API部分知识点

一、Dom获取&属性操作 &#xff08;一&#xff09;、 Web API 基本认知 1、变量声明 const 声明的值不能更改&#xff0c;而且const声明变量的时候需要里面进行初始化 但是对于引用数据类型&#xff0c;const声明的变量&#xff0c;里面存的不是 值&#xff0c;是 地址…...

钉钉调试微应用整理2

第一步 新建应用 钉钉开放平台](https://open-dev.dingtalk.com/) 去新增应用 第二步 配置应用信息 把本地代码运行起来&#xff0c;并设置本地地址 第三步 在本地代码添加调试命令 这里有2中添加方式 哪一种都可以 方式一&#xff1a; index.html页面中 <!DOCTYPE h…...

C++初级入门(1)

第一部分 基础语法入门 一、基础 1、变量与常量 1、变量 变量存在的意义:方便管理内存空间 2、常量 用于记录程序中不可更改的数据 #define 常量名 常量值 const 数据类型 常量名常量值 ; 2、数据类型 1、整型 short 2字节 int 4字节 long Wi…...

group_concat配置影响程序出bug

在 ThinkPHP 5 中&#xff0c;想要临时修改 MySQL 数据库的 group_concat_max_len 参数&#xff0c;可以使用 原生 SQL 执行 来修改该值。你可以通过 Db 类来执行 SQL 语句&#xff0c;从而修改会话&#xff08;Session&#xff09;级别的变量。 步骤 设置 group_concat_max_l…...

将Go项目编译为可执行文件(windows/linux)

windows 编译成windows环境exe可执行文件过程&#xff0c;打开文件所在目录&#xff0c;在资源路径框中输入cmd&#xff0c;打开cmd命令框&#xff0c;通过“go env”查看当期环境变量&#xff0c;以windows10环境为例&#xff0c;默认为windows环境。 // 配置环境变量 SET C…...

IMS高压发生器维修高压电源维修XRG100/1000

IMS高压发生器的硬件组成&#xff1a; 高压控制发生器主要由高压发生器和高压控制器两部分组成。高压控制器是控制调节X射线管管电压和管电流的机构,高压发生器是管电压和管电流产生的执行机构,通过高压控制器对高压发生器进行控制调节,通过高压电缆将高压发生器与X射线管连接…...

斯坦福泡茶机器人DexCap源码解析:涵盖收集数据、处理数据、模型训练三大阶段

前言 因为我司「七月在线」关于dexcap的复现/优化接近尾声了&#xff0c;故准备把dexcap的源码也分析下。​下周则分析下iDP3的源码——为队伍「iDP3人形的复现/优化」助力 最开始&#xff0c;dexcap的源码分析属于此文《DexCap——斯坦福李飞飞团队泡茶机器人&#xff1a;带…...

RabbitMQ的DLX(Dead-Letter-Exchange 死信交换机,死信交换器,死信邮箱)(重要)

RabbitMQ的DLX 1、RabbitMQ死信队列2、代码示例2.1、队列过期2.1.1、配置类RabbitConfig&#xff08;关键代码&#xff09;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特指显示屏幕上的信息&#xff0c;在是UI的子集&#xff0c;UI是一个游戏中虽有的交互元素的总称 本文用了大量ai总结 &#xff0b; 个人微调&#xff0c;不喜勿喷&#xff0c;前篇如下想要成为独立游戏作者 &#xff1a;通关&#xff01;游戏设计之道 1-4 操作篇-C…...

sql专题 之 三大范式

文章目录 背景范式介绍第一范式&#xff1a;属性不可再分第二范式第三范式注意事项 为什么不遵循后续的范式数据库范式在实际应用中会遇到哪些挑战&#xff1f; 背景 数据库的范式&#xff08;Normal Form&#xff09;是一组规则&#xff0c;用于设计数据库表结构以 减少数据冗…...

node.js安装和配置教程

软件介绍 Node.js是一个免费的、开源的、跨平台的JavaScript运行时环境&#xff0c;允许开发人员在浏览器之外编写命令行工具和服务器端脚本。 Node.js是一个基于Chrome JavaScript运行时建立的一个平台。 Node.js是一个事件驱动I/O服务端JavaScript环境&#xff0c;基于Goo…...

定时器输入捕获实验配置

首先&#xff0c;第一个时基工作参数配置 HAL_TIM_IC_Init( ) 还是一样的套路&#xff0c;传参是一个句柄&#xff0c;先定义一个结构体 Instance&#xff1a;指向TIM_TypeDef的指针&#xff0c;表示定时器的实例。TIM_TypeDef是一个包含了定时器寄存器的结构体&#xff0c;用…...

【C/C++】memcpy函数的使用

零.导言 当我们学习了strcpy和strncpy函数后&#xff0c;也许会疑惑整形数组要如何拷贝&#xff0c;而今天我将讲解的memcpy函数便可以拷贝整形数组。 一.memcpy函数的使用 memcpy函数是一种C语言内存函数&#xff0c;可以按字节拷贝任意类型的数组&#xff0c;比如整形数组。 …...

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 )&#xff0c;意即"不仅仅是SQL"。 在现代的计算系统上每天网络上都会产生庞大的数据量。这些数据有很大一部分是由关系数据库管理系统&#xff08;RDBMS&#xff09;来处理。 通过应用实践证明&#xff0c;关系模型是非常适合于客户服务器…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...

华为OD机试-最短木板长度-二分法(A卷,100分)

此题是一个最大化最小值的典型例题&#xff0c; 因为搜索范围是有界的&#xff0c;上界最大木板长度补充的全部木料长度&#xff0c;下界最小木板长度&#xff1b; 即left0,right10^6; 我们可以设置一个候选值x(mid)&#xff0c;将木板的长度全部都补充到x&#xff0c;如果成功…...

华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)

题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...