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

鸿蒙开发三项知识点简述

一、@State

这是 ArkUI 基础状态装饰器,用于给组件内变量赋予响应式特性。变量数值发生变更时,绑定该变量的界面会自动刷新 UI;状态仅在当前自定义组件内生效,弹窗显示开关、输入内容、按钮选中状态这类本地交互逻辑,一般都用它来控制。

import router from '@ohos.router';

@Entry
@Component
struct Logins{
@State username:string = "" //定义用户名
@State password:string = "" //定义密码
build() {
Column({space:20}){
Text('用户登录')
.fontSize(32)
.fontWeight(FontWeight.Bolder)
.margin({ top: 20, bottom: 30 })

TextInput({text:this.username, placeholder: "请输入账号: " })
.width(320)
.height(52)
.borderRadius(12)
.fontSize(16)
.onChange((value: string) => {
this.username = value
})

TextInput({text:this.password, placeholder: "请输入密码: " })
.type(InputType.Password)
.width(320)
.height(52)
.borderRadius(12)
.fontSize(16)
.onChange((value:string)=>{
this.password = value
})

Text("没有账号?立即注册")
.fontSize(20)
.fontColor(0x1677ff)
.onClick(()=>{
router.pushUrl({
url:'pages/Register' //页面路由 url:'pages/下一页的文件名'
})
})

Row({space:20}) {
Button("立即登录")
.width(150)
.height(52)
.backgroundColor(0x007Dff)
.fontSize(18)
.borderRadius(12)
.margin({ bottom: 80 }) //距离父容器下边缘向上留出 80 像素的距离。
.onClick(() => {
if (this.username == "root" && this.password == "root") {
AlertDialog.show({
title: "登录成功",
message: `欢迎你,${this.username}`
})
}
else {
AlertDialog.show({
title: "登录失败",
message: "用户名或者密码错误" //弹窗
})
}
})
}
}
.width('100%')
.height('100%')
}
}

二、弹窗

属于悬浮于页面上层的交互组件,用来做提示确认、表单录入、选项选择等场景。 常用实现:CustomDialog 自定义弹窗、系统简易提示框 promptAction、底部弹出面板 bindSheet,也可通过路由配置弹窗页面;弹窗的显示隐藏大多依靠 @State 变量控制。

文件main_pages.json

{
"src": [
"pages/Index",
"pages/Second",
"pages/Logins", //第一个文件的名字
"pages/Register", //第二个文件的名字
"pages/RouterDemo",
"pages/PageOne",
"pages/diyiye",
"pages/dierye",
"pages/LoginRouter",
"pages/HomePage"
]
}

三、路由

负责应用多页面跳转、参数传递、页面回退,是多页面应用核心能力。

  1. 原生 router 模块:pushUrl 打开新页面、back 返回上一页,跳转时可携带页面参数;
  2. Navigation 导航容器:自带导航栏与切换动画,适配折叠屏、分栏等复杂布局。

import router from '@ohos.router';

@Entry
@Component
struct Register{
build() {
Column({space:20}){
Text('用户注册')
.fontSize(30)
.fontWeight(FontWeight.Bolder)
.margin({top:20,bottom:30})

TextInput({placeholder:"请输入手机号:"})
.width(320)
.height(52)
.borderRadius(12)
.fontSize(16)

TextInput({placeholder:"请输入密码:"})
.type(InputType.Password)
.width(320)
.height(52)
.borderRadius(12)
.fontSize(16)

TextInput({placeholder:"请再输入密码:"})
.type(InputType.Password)
.width(320)
.height(52)
.borderRadius(12)
.fontSize(16)

Text("已有账号?立即登录")
.fontSize(20)
.fontColor(0x1677ff)
.onClick(()=>{
router.back({
url:'pages/Logins' //第一个文件的名字
})
})

Button('注册')
.width(150)
.height(52)
.fontSize(16)
}
.width('100%')
.height('100%')
}
}

三者关系

@State 管控局部界面状态;弹窗是临时悬浮交互窗口;路由用于完整页面间跳转,开发中三者经常搭配使用。

http://www.jsqmd.com/news/1097121/

相关文章:

  • 别再硬编码了!用Camunda的ProcessInstanceModification API优雅处理流程退回与跳转
  • Three.js 三维转屏幕坐标教程
  • 《从CAPM到Barra:多因子模型的演进与基于AmazingData的实战》
  • 告别TrackBar!用这个开源控件5分钟搞定C# WinForm酷炫仪表盘
  • 竞争存在论:运动三连续统——时空动力学的统一生成理论
  • GoB插件:5分钟实现Blender与ZBrush无缝3D数据交换的高效方案
  • 保姆级教程:用Frida-Dexdump一键脱掉360加固的壳(附最新脚本)
  • 会小汪观察|第44届康博会圆满收官,重塑西部康养产业新格局
  • 技术实践:通过AI聚合平台统一调用文生图、视频生成和数字人API
  • 如何3步完成Nintendo Switch大气层自定义固件安装:新手终极教程
  • 别再手动调参了!用ModelScope的pipeline,5行代码搞定图像风格迁移与视频修复
  • 学机器视觉,别先纠结 OpenCV、HALCON 还是深度学习
  • 工信局如何识别产业链中的断点与卡脖子环节?
  • 保姆级教程:用R语言mediation包搞定NHANES数据的中介效应分析(附完整代码)
  • 靠谱的儿童近视配镜
  • 鸿蒙 ArkTS 基础组件与通用样式学习笔记
  • 实测对比:DECIMER、Img2Mol、MolScribe,哪个化学结构识别工具更靠谱?
  • 参数引发的复制中断:max_binlog_cache_size 导致 SQL 线程异常的复现与分析
  • VR-Reversal终极指南:免费将3D VR视频转为2D的完整教程
  • 达梦DMRMAN备份集校验:别等数据丢了才检查!手把手教你用CHECK命令给备份上个‘保险’
  • 如何让高校科研成果更有效地对接市场需求?
  • 5分钟掌握ComfyUI中文工作流:从新手到AI绘画高手的完整指南
  • 岁月从不败美人:会保养的女人与科学养生之道
  • 长链非编码RNA Gm10451(P10451)在干细胞分化与糖尿病治疗中的关键作用
  • SAP顾问必看:手把手教你用SNOTE打补丁,从下载SAR文件到撤回Note全流程避坑
  • 2026图片去水印方法:手机电脑免费工具、PS详细步骤、在线网站推荐
  • 【小白向】虾壳云一键部署完整实操,低配电脑也能流畅运行 OpenClaw v2.7.9 数字员工(最新安装包)
  • 江苏蔡司3D扫描仪定制厂家:为什么越来越多企业开始重视全尺寸检测?
  • AI建站工具零基础极速上手:10分钟生成你的第一个网站
  • Windows系统文件ActivationClient.dll丢失找不到问题解决