一、左侧页面:RouterRegister 注册页面核心知识点
1. 路由跳转 + 页面传参
router.pushUrl({ url:"pages/HomePage", params:{ username:this.username, password:this.password } })router.pushUrl({})作用:打开新页面,页面栈新增一条记录,可返回上一页。url属性填写目标页面在 pages 文件夹的路径,路径字符串末尾必须加逗号,否则报语法错误(截图圈出 url 行就是易错点)。params对象用于携带数据传给下一个页面,可以传递多个自定义字段(账号、密码)。
注意点
- url 路径写错、页面未在
main_pages.json注册,跳转空白 / 报错; - url 与 params 是同一个对象的两个属性,中间必须用逗号分隔。
2. 表单多条件校验逻辑
if ((this.username!="") && (this.password!="") && (this.password2!="") && (this.password==this.password2))&&并且:所有条件全部满足才会执行跳转;- 校验四条规则:账号非空、密码非空、确认密码非空、两次密码完全一致;
- 任意一条不满足,进入 else 弹窗提示。
3. AlertDialog 弹窗提示
AlertDialog.show({ title:"注册失败", message:`注册的两次密码为空或者不一致,${this.username}` })- 作用:表单校验失败弹出提示框,告知用户填写错误;
- 必备导入:
import AlertDialog from '@ohos.promptAction';,不导入直接标红; `模板字符串`:可以通过${变量}把账号动态拼接在提示文字里。
4. @State 响应式变量
@State username:string = "" @State password:string = "" @State password2:string = ""@State装饰器:变量发生变化,页面绑定该变量的输入框、文字自动刷新;- 三个变量分别绑定账号、密码、确认密码输入框,实现双向数据绑定;
- 规范:必须赋初始空值
"",不能只定义不赋值。
5. 点击事件 onClick
Button("立即注册") .onClick(()=>{ // 校验+跳转/弹窗逻辑 })onClick()绑定点击回调,点击按钮才执行内部校验代码;- 适用场景:按钮、文字、图片等所有可点击组件。
6. 布局基础 Column
Column({space:25}){ // 所有输入框、按钮、文字 }- 垂直布局,内部组件从上到下排列;
space:25统一设置内部组件上下间距;- 页面唯一根布局,所有 UI 必须包裹在 Column 内。
二、右侧页面:HomePage 首页接收路由参数知识点
import router from '@ohos.router'; @Entry @Component struct HomePage{ @State username:string = "" onPageShow(): void { const params = router.getParams() as Record<string,string> if (params){ this.username = params.username } } build() { Column(){ Text(`你好 ${this.username}`) } } }1. 生命周期函数 onPageShow ()
- 触发时机:页面每次显示、打开都会自动执行;
- 专门用来接收上一页路由传递过来的参数;
- 不能写在 build 内部,必须写在 struct 内、build 外部。
2. 接收参数核心 APIrouter.getParams()
const params = router.getParams() as Record<string,string>router.getParams():获取上一页params携带的全部数据;as Record<string,string>:类型断言,告诉编译器参数是「字符串键 + 字符串值」对象,消除类型报错;if(params)判空:防止没有参数时访问params.username导致程序崩溃。
3. 变量赋值与页面自动刷新
this.username = params.username因为username被@State修饰,赋值完成后下方Text文字立刻更新,展示传递过来的账号
4. 动态文本模板字符串
Text(`你好 ${this.username}`)反引号`模板语法,${变量名}直接嵌入文字,实现动态文字展示用户名。
5. 页面基础修饰器
@Entry:标记当前文件为独立页面,模拟器可单独运行;@Component:声明这是 ArkUI 自定义组件;- 一个页面只能有一个被
@Entry修饰的 struct。
6. 导入路由模块
import router from '@ohos.router';只要使用router.pushUrl、router.getParams,页面顶部必须导入路由工具,否则代码标红。
三、整套页面完整业务流程总结
- 注册页输入账号、密码、确认密码,内容实时存入
@State变量; - 点击【立即注册】触发
onClick,执行多条件表单校验; - 填写合规:通过
router.pushUrl携带 username、password 跳转到 HomePage; - HomePage 页面打开自动执行
onPageShow,调用router.getParams拿到传递的账号; - 将参数赋值给页面
@State username,页面文字自动渲染:你好 xxx; - 填写不合规:弹出 AlertDialog 弹窗提示注册失败。
四、高频易错点汇总
pushUrl内部 url 行末尾缺少逗号,直接报语法红波浪;- 使用 AlertDialog 忘记导入
@ohos.promptAction; - 使用路由忘记顶部
import router; - 接收参数时不加
if(params)判空,无参数进入页面直接闪退; - 页面没有唯一根 Column 布局,编译报错;
@State变量不赋初始值,运行异常;- 目标页面未在 main_pages.json 注册,跳转空白页面。