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

news/2024/7/21 9:50:23 标签: vue.js, harmonyos, 前端

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

  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.niftyadmin.cn/n/5264609.html

相关文章

Verilog HDL数据类型

1 网络型&#xff08;net型&#xff09;数据 两种驱动方式&#xff1a;在结构描述中将其连接到一个门元件或模块的输出端&#xff1b;或用assign语句对其赋值。 【例】分别调用Verilog HDL提供的门元件和采用assign语句设计一个二输入与非门 input a,b; …

【教程】关于ORB-SLAM3编译内存不够的问题解决方法--Swap

引言 在前面博主已经完成了ORB-SLAM3的安装与配置&#xff0c;中间出现过编译内存不足的问题&#xff0c;在这里着重记录下如何解决该问题。 一、创建swap分区 1、打开终端&#xff0c;输入下面指令&#xff1a; free -m 可以看到swap一行是0&#xff0c;则代表没有分配交…

12V升19V4A升压芯片同步升压WT3211

12V升19V4A升压芯片同步升压WT3211 WT3211是一款高性能同步升压控制器&#xff0c;输入3V至32V输出外置MOS可驱动N沟道MOSFET。同步整流可提升效率&#xff0c;降低功率损耗并降低热要求。 WT3211包括可调电流限制、可调软启动、可调补偿网和热关机&#xff0c;防止各种异常造成…

Axure RP 9 入门教程

1. Axure简介 Axure 是一个交互式原型设计工具&#xff0c;可以帮助用户创建复杂的交互式应用程序和网站。Axure 能够让用户快速构建出具有高度可交互性的原型&#xff0c;可以在团队中进行协作、分享和测试。 使用 Axure 可以设计出各种不同类型的原型&#xff0c;包括网站、移…

设计模式——代理模式(Proxy Pattern)

概述 代理模式是指为其他对象提供一种代理&#xff0c;以控制对这个对象的访问。代理对象在访问对象和目标对象之间起到中介作用。代理对象也可以在不修改目标对象的前提下&#xff0c;提供额外的功能操作&#xff0c;拓展目标对象的功能&#xff0c;比如说在目标对象的某个方法…

食品软包装行业分析:预计2029年将达到20573亿元

软包装食品&#xff0c;经加工用复合塑料薄膜袋包装&#xff0c;并经排气、密封、杀菌处理的一类食品。 软包装食品&#xff0c;俗称“软罐头”。经加工用复合塑料薄膜袋包装&#xff0c;并经排气、密封、杀菌处理的一类食品。开封简便&#xff0c;加热简单&#xff0c;包装轻薄…

xtu oj 1214 A+B IV

题目描述 小明喜欢做ab的算术&#xff0c;但是他经常忘记把末位对齐&#xff0c;再进行加&#xff0c;所以&#xff0c;经常会算错。 比如1213&#xff0c;他把12左移了1位&#xff0c;结果变成了133。 小明已经算了一些等式&#xff0c;请计算一下他到底移动了多少位。 输入…

酸菜行业分析:占整体市场规模比重的1.2%

酸菜的加工不仅有巨大的市场需求&#xff0c;且对分布于湖南、四川、广西、贵州等地的芥菜等植物资源和农产品价值&#xff0c;予以有效提升&#xff0c;是贫困地区农民增收的重要方式。单杨建议&#xff0c;以酸菜为原料的食品加工企业应引以为戒&#xff0c;将食品安全重点防…