详细教程 - 从零开发 Vue 鸿蒙harmonyOS应用 第二节 (鸿蒙Stage模型 登录页面 JS版)

实现登录功能主要逻辑包括:

  1. 导入需要的组件
  2. 定义登录页面
  • 渲染界面
  • 登录方法
  • 忘记密码方法
  1. 启用登录页面

一、功能介绍

本登录功能通过Stage框架实现了一个标准的用户名密码登录交互。支持账号密码输入,校验和存储,以及登录成功后的页面跳转。同时处理了常见的异常情况,如输入错误、网络异常等

二、技术方案

  1. 前端采用Stage框架,通过Entry入口加载组件,实现界面渲染。
  2. 用户输入通过Prompt组件获取,封装为Model进行校验。
  3. 登录请求调用服务端接口,通过Ability注入网络能力。异常通过Catch处理。
  4. 登录成功后,通过Storage组件持久化Token信息,Router组件跳转进入主页面。

三、功能实现

1. 登录页面组件渲染

  • 通过@Entry注解入口,加载LoginComp组件,渲染用户名、密码输入框,登录按钮等界面元素。

2. 获取输入信息

  • 在登录方法中,使用Prompt组件的getText方法获取用户名、密码文本输入信息。

3. 输入校验

  • 利用Model模型对输入信息做校验,校验规则包括非空、长度限制、格式验证等。

4. 服务端登录验证

  • 调用注入的Ability中定义的login方法发送登录请求。
  • 在Ability中创建网络任务,发起实际的登录接口调用。

5. 异常处理

  • 使用Catch机制捕获整个登录过程中的异常。
  • 按照不同异常进行分类处理。如输入错误、网络错误等。

6. Token存储

  • 登录成功后,通过Storage组件put方法永久存储登录Token。

7. 主页跳转

  • 调用Router组件的replace接口跳转到主页面。

四、扩展能力

在此基础上,可以继续扩展功能:(后续持续更新)

  • 密码加密保存
  • 自动登录、记住密码
  • 第三方微信、QQ登录
  • 更丰富的异常分类和处理等

完整示例代码:

hml:

<!-- 1. 页面布局和基础样式 -->
<div class="container"><div class="login-page"><!-- 标题栏部分布局 --><div class="header"><text class="title">欢迎登录</text>    </div><!-- 登录表单部分布局 --><div class="form"><!-- 用户名输入框部分 --><div class="input-item"> <text>用户名</text><input type="text" id="username" class="input"></input></div><!-- 密码输入框部分 --><div class="input-item"><text>密码</text>  <input type="password" id="password" class="input"></input></div><!-- 登录按钮部分 --><div class="btn-wrapper"><button id="login" class="btn">登录</button>  </div><!-- 忘记密码部分 --><text id="forgot" class="extra">忘记密码?</text></div></div>  
</div>

css:

/* 页面总体样式 */
page {display: flex;flex-direction: column;background-color: #f6f6f6;
}/* 标题部分 */
.title {font-size: 40px;font-weight: bold;color: #007dff;
}/* 输入框部分 */
input {width: 80%;padding: 15px; border: 1px solid #ddd;border-radius: 5px;
}/* 按钮部分 */  
button {width: 80%;height: 50px;color: #fff;background-color: #007dff;  border-radius: 25px;box-shadow: 0 2px 10px #aaa; 
}button:active {opacity: 0.7; 
}/* 底部链接 */
text {font-size: 12px; color: #007dff;margin-top: 15px; 
}

js:

// 3. 交互逻辑处理
import router from '@system.router';  // 获取节点
const usernameInput = document.getElementById('username');
const passwordInput = document.getElementById('password');
const loginButton = document.getElementById('login');
const forgotButton = document.getElementById('forgot');// 登录方法  
function login() {// 获取用户名和密码  let username = prompt.getTextFieldValue('username');let password = prompt.getTextFieldValue('password');// 简单验证if(!username || !password) {prompt.showToast({message: '用户名和密码不能为空'});return;}// TODO: 调用服务端接口验证//这个位置调用后台登录接口,如果验证账号密码成功则通过下述方法跳转到首页// 模拟登录成功prompt.showToast({message: '登录成功'});// 登录信息保存本地storage.set({key: 'user',value: JSON.stringify({username: username})});// 登录成功,跳转首页 router.replace({uri: 'pages/home' });
}// 登录按钮点击方法
loginButton.onclick = () => {login();
}// 忘记密码按钮点击方法
forgotButton.onclick = () => {router.push({uri: 'pages/forgotPassword' });
}

五、结语

下一节:详细教程 - 从零开发 Vue 鸿蒙应用 第三节 (封装TabBar)
上一节:详细教程 - 从零开发 Vue 鸿蒙应用 第一节

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/224281.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JMeter逻辑控制器

JMeter逻辑控制器 一、IF控制器1、作用2、步骤 二、循环控制器1、作用2、步骤3、线程组和循环控制器的区别&#xff1f; 三、ForEach控制器1、作用2、步骤 一、IF控制器 1、作用 **控制下面的测试元素是否执行**2、步骤 添加线程组用户定义的变量添加if控制器&#xff0c;判断…

动态内存管理,malloc和calloc以及realloc函数用法

目录 一.malloc函数的介绍 malloc的用法 举个例子 注意点 浅谈数据结构里的动态分配空间 二.calloc函数的介绍 三.realloc函数的介绍 四.柔性数组的介绍 为什么有些时候动态内存函数头文件是malloc.h,有些时候却是stdlib.h 一.malloc函数的介绍 malloc其实就是动态开辟…

workFlow c++异步网络库编译教程与简介

如果觉得写的可以,请给一个点赞关注支持一下 C异步网络库workflow入门教程(1)HTTP任务 C异步网络库workflow系列教程(2)redis任务 C异步网络库workflow系列教程(3)Series串联任务流 简介 搜狗公司C服务器引擎&#xff0c;编程范式。支撑搜狗几乎所有后端C在线服务&#xf…

老卫带你学---leetcode刷题(29. 两数相除)

29. 两数相除 问题 给你两个整数&#xff0c;被除数 dividend 和除数 divisor。将两数相除&#xff0c;要求 不使用 乘法、除法和取余运算。 整数除法应该向零截断&#xff0c;也就是截去&#xff08;truncate&#xff09;其小数部分。例如&#xff0c;8.345 将被截断为 8 &…

云原生之深入解析Kubernetes中服务的性能

一、Pyroscope 简介 ① 什么是 Pyroscope&#xff1f; 开发人员通常需要查看生产应用程序中的性能瓶颈以确定问题的原因&#xff0c;为此通常需要可以通过日志和代码工具收集的信息。不幸的是&#xff0c;这种方法通常很耗时&#xff0c;并且不能提供有关潜在问题的足够详细信…

Angular使用Subject和Observable处理异步数据流

在Angular中常用RxJS库中的Subject和Observable处理异步数据流。 概念&#xff1a; Observable&#xff1a;Observable是一个表示异步数据流的对象&#xff0c;它可以被订阅以获取数据并且可以被取消订阅。Observable通常用于创建和处理异步数据流&#xff0c;可以进行各种操…

论文解读:Medical Transformer论文创新点解读

这篇文章其实就是基于Axial-DeepLab: Stand-Alone Axial-Attention forPanoptic Segmentation论文上进行的一些小创新 Stand-Alone Axial-Attention forPanoptic Segmentation论文解读&#xff1a; 论文解读&#xff1a;Axial-DeepLab: Stand-Alone Axial-Attention forPanop…

【TES720D-KIT】基于国内某厂商FMQL20S400全国产化ARM开发套件(核心板+底板)

板卡概述 TES720D-KIT是专门针对我司TES720D&#xff08;基于国内某厂商FMQL20S400的全国产化ARM核心板&#xff09;的一套开发套件&#xff0c;它包含1个TES720D核心板&#xff0c;加上一个TES720D-EXT扩展底板。 FMQL20S400是国内某厂商电子研制的全可编程融合芯片&#xf…

Go 好用的Api

Go常用第三方库 命令 解释 备注 go get -u github.com/go-sql-driver/mysql Mysql驱动包 go get -u github.com/xormplus/xorm Xorm数据库框架

使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题

文章目录 一、 篇头二、 操作步骤2.1 编译AOSP AS工程文件2.2 将AOSP导入Android Studio2.3 切到Project试图2.4 等待index结束2.5 下载缺失的JDK 1.82.6 导入完成 三、 导入AS的好处3.1 本文案例演示源码编译错误AS对比同文件其余地方的调用AS错误提示依赖AS做错误修正 一、 篇…

PNG和JPG格式图片的区别

JPEG的文件格式一般有两种文件扩展名&#xff1a;.jpg和.jpeg&#xff0c;这两种扩展名的实质是相同的&#xff0c;我们可以把*.jpg的文件改名为*.jpeg&#xff0c;而对文件本身不会有任何影响 但是PNG&#xff08;Portable Network Graphics&#xff09;和JPEG&#xff08;Jo…

逆向经历回顾总结

逆向经历回顾总结 一、前言 将自己的逆向经验做个总结&#xff0c;希望新手对逆向大方向能快速了解。高手有啥不一样的经验也可以讨论讨论。 二、个人经历 本人入行逆向全因一部韩剧“幽灵”&#xff0c;里面涉及渗透、病毒分析、取证的攻防对抗&#xff0c;我觉得对新手来说…

图片转HTML-screenshot-to-code

Github地址 https://github.com/abi/screenshot-to-code 在线站 Screenshot to Code 简介 这是一个基于GPT4开发的一个工具站&#xff0c;它可以基于截图生成站点代码&#xff0c;生成速度快且准确。

C语言——const函数

一、定义常量&#xff1a;const关键字用于定义常量&#xff0c;这意味着该变量的值在程序运行期间不能被改变。 const int a 10; 二、修饰指针&#xff1a;const关键字可以修饰指针&#xff0c;表示指针指向的内容是常量&#xff0c;不能通过该指针修改所指向的内容。 i…

SpringBoot 究竟是如何跑起来的

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《SpringBoot》。&#x1f3af;&#x1f3af; &…

【MySQL 索引】InooDB 索引实现

1 索引定义 维基百科对数据库索引的定义: 数据库索引是数据库管理系统&#xff08;DBMS&#xff09;中的一个排序数据结构, 以协助快速查询和更新数据库表中的数据。 MongoDB对索引的定义: 索引是一种特殊的数据结构, 以有序和便于遍历的形式存储数据集合中特定字段或一组字段…

jmu-PTA Java答案汇总(上)

目录 Java练习第二章 7-21 统计符合条件元素的个数 7-210 sdut-array2-1-矩阵转置&#xff08;I&#xff09; 7-211 JAVA-输入输出入门 7-212 sdut-入门-三个整数和、积与平均值 7-213 jmu-java-m01-System.out.printf入门 7-214 jmu-java-m02-循环求和 7-215 编程题&am…

第22节: Vue3 可写计算

在UniApp中使用Vue3框架时&#xff0c;你可以使用可写计算属性来封装复杂的计算逻辑&#xff0c;并将结果保存到一个响应式引用对象中&#xff0c;以便在其他地方使用。 下面是一个示例&#xff0c;演示了如何在UniApp中使用Vue3框架使用可写计算&#xff1a; <template&g…

开源项目-

无人机跟踪移动平台并降落 基于YOLOARUCO的无人机目标检测及位置计算 ego_v2 移动物体的跟踪

Vue2面试题:说一下对vuex的理解?

五种状态&#xff1a; state: 存储公共数据 this.$store.state mutations&#xff1a;同步操作&#xff0c;改变store的数据 this.$store.commit() actions: 异步操作&#xff0c;让mutations中的方法能在异步操作中起作用 this.$store.dispatch() getters: 计算属性 th…