移动开发:Ionic框架实现注册与登录功能

news/2024/7/7 9:57:22

由于项目是前后端分离式开发,所以移动端使用ionic框架,后端API接口使用SpringBoot框架。注册与登录的后端实现可以参考我的这篇文章:后端开发:SpringBoot实现注册与登录功能。ionic框架实现注册与登录其实就是调用后端API接口对数据进行处理。移动端主要负责界面的设计和接口的调用。


一、代码部分

1、创建模型类

根据数据库的字段进行建模,在model文件夹下创建一个Typescript文件,命名为Users。代码如下:
export class Users{
    usersid:string;
    pass:string;
    roleid:string;
    username:string;
    cellphone:string;
    nickname:string;
    icon:string;
    sex:string;
}

2、创建service

创建命令:ionic g service service/auth
import { Injectable } from '@angular/core';
import {HttpClient} from "@angular/common/http";
import {ConfigService} from "./config.service";
import {Users} from "../model/Users";

@Injectable({
  providedIn: 'root'
})
export class AuthService {

    constructor(private http:HttpClient,private config:ConfigService) { }

    //用户信息添加及修改
    private addOrUpdateUserUrl=this.config.HOST+"/public/saveUser";
    addOrUpdateUser(users:Users){
        return this.http.post(this.addOrUpdateUserUrl,users).toPromise();
    }

    //登录
    private loginUrl=this.config.HOST+"/public/login";
    login(username:string,
          password:string){
        let parm={
            "username":username,
            "password":password
        }
        return this.http.post(this.loginUrl,parm).toPromise();
    }


}

3、创建注册页面

创建页面命令:ionic g page page/regist

(1)、逻辑部分代码——regist.page.ts

import { Component, OnInit } from '@angular/core';
import {Users} from '../../model/Users';
import {AuthService} from "../../service/auth.service";
import {ToastService} from "../../service/toast.service";

@Component({
  selector: 'app-regist',
  templateUrl: './regist.page.html',
  styleUrls: ['./regist.page.scss'],
})
export class RegistPage implements OnInit {
    user:Users;
  constructor(private authservice:AuthService
      ,private toastservice:ToastService) {
      this.user=new Users();
  }

  ngOnInit() {
  }

  //保存方法
    save(){
        console.dir(this.user);

        this.authservice.addOrUpdateUser(this.user)
            .then((data:any)=>{
                if(data.msg=='ok'){
                    this.toastservice.showSuccessToast('保存成功');
                }
                else{
                    this.toastservice.showErrrorToast('保存失败,请重试');
                }
            })
    }

}

(2)、注册界面HTML部分代码

<ion-header>
  <ion-toolbar>
    <!--添加返回按钮-->
    <ion-buttons slot="start">
      <ion-back-button></ion-back-button>
    </ion-buttons>

    <ion-title>用户注册</ion-title>
    <!--为保存按钮添加点击事件-->
    <ion-button slot="end" size="small" (click)="save()">保存</ion-button>
  </ion-toolbar>
</ion-header>

<ion-content>

  <ion-list>
    <ion-item>
      <ion-label position="stacked">用户名</ion-label>
      <ion-input [(ngModel)]="user.username"></ion-input>
    </ion-item>

    <ion-item>
      <ion-label position="stacked">密码</ion-label>
      <ion-input type="password" [(ngModel)]="user.pass"></ion-input>
    </ion-item>

    <ion-item>
      <ion-label position="stacked">联系电话</ion-label>
      <ion-input [(ngModel)]="user.cellphone"></ion-input>
    </ion-item>

    <ion-item>
      <ion-label position="stacked">昵称</ion-label>
      <ion-input [(ngModel)]="user.nickname"></ion-input>
    </ion-item>


    <ion-item>
      <ion-label position="stacked">头像地址</ion-label>
      <ion-input [(ngModel)]="user.icon"></ion-input>
    </ion-item>


    <ion-radio-group [(ngModel)]="user.sex">
      <ion-list-header>
        <ion-label>
          性别
        </ion-label>
      </ion-list-header>

      <ion-item>
        <ion-label></ion-label>
        <ion-radio value="M"></ion-radio>
      </ion-item>

      <ion-item>
        <ion-label></ion-label>
        <ion-radio value="F"></ion-radio>
      </ion-item>

    </ion-radio-group>
  </ion-list>

</ion-content>

(3)、注册界面效果图

image

4、创建登录模块组件

登录这里使用组件化(component),主要是因为要实现软件打开时会自动弹出登录页面。可以通过组件来实现。

(1)、创建登录组件

创建命令:ionic g component components/login

(2)、登录界面逻辑代码——login.component.ts

import { Component, OnInit } from '@angular/core';
import {AuthService} from "../../service/auth.service";
import {ToastService} from "../../service/toast.service";

@Component({
    selector: 'app-login',
    templateUrl: './login.component.html',
    styleUrls: ['./login.component.scss'],
})
export class LoginComponent implements OnInit {
    username:string;
    password:string;
    constructor(private authservice:AuthService
        ,private toastservice:ToastService) { }

    ngOnInit() {}

//点击登录按钮触发的事件方法
    login(){
        this.authservice.login(this.username,this.password)
            .then((data:any)=>{

                if(data.msg=='ok'){
                    this.toastservice.showSuccessToast('登录成功');
                }
                else {
                    this.toastservice.showWarningToast('用户名或是密码错误,请重试');
                    this.username="";
                    this.password="";
                }

            })
    }

}

(3)、登录界面HTML代码

<ion-list>
  <ion-item>
    <ion-label position="stacked">用户名</ion-label>
    <ion-input [(ngModel)]="username"></ion-input>
  </ion-item>

  <ion-item>
    <ion-label position="stacked">密码</ion-label>
    <ion-input [(ngModel)]="password"></ion-input>
  </ion-item>

  <ion-button  (click)="login()">登录</ion-button>
  <ion-button color="danger">重置</ion-button>


</ion-list>

5、在app.module.ts中注册组件

app.module.tsimports版块中加入:FormsModule

6、在tabs中设置弹出框

(1)、tabs.page.ts中添加弹出框的触发方法

import { Component } from '@angular/core';
import {ModalController} from "@ionic/angular";
import {ModalOptions} from '@ionic/core'
import {LoginComponent} from '../components/login/login.component';


@Component({
  selector: 'app-tabs',
  templateUrl: 'tabs.page.html',
  styleUrls: ['tabs.page.scss']
})
export class TabsPage {

  constructor(public modalController: ModalController) {}

    //当软件开始运行时调用presentModal方法,弹出登录窗口
    ngOnInit(){
        this.presentModal();
    }


    //弹出登录窗口
    async presentModal() {
        const modal = await this.modalController.create(<ModalOptions>{
            component: LoginComponent
        });
        return await modal.present();
    }

}

这个时候正常情况登录界面的效果就做完了,不过因为我用的ionic版本过高,遇到了一个问题。报错:

Error: No component factory found for LoginComponent. Did you add it to @NgModule.entryComponents?

这个问题我会单独写一篇文章,这里如果你也遇到了类似的问题,不要慌,静等我的下一篇博客。

二、登录效果展示

image
image


http://www.niftyadmin.cn/n/3649593.html

相关文章

Android根据分辨率进行单位转换-(dp,sp转像素px) - topMan'blog - ITeye技术网站

【转】Android根据分辨率进行单位转换-(dp,sp转像素px) 博客分类&#xff1a; Android 开发学习 Android系统中&#xff0c;默认的单位是像素(px)。也就是说&#xff0c;在没有明确说明的情况下&#xff0c;所有的大小设置都是以像素为单位。 如果以像素设置大小&#xff0c;会…

[sync4j]Nokia手机和sync4j服务器同步的第三次尝试

第三次手机登录&#xff1a;按照前面所说的&#xff0c;设置手机上面的“远程数据库”为“./contact”&#xff0c;然后做手机同步。结果&#xff0c;经过漫长的初始化时间&#xff0c;手机上报告错误“连接错误同步类型不被支持无法和服务器同步”在服务器日志中&#xff0c;我…

Ionic6使用组件出现错误:Did you add it to @NgModule.entryComponents

缘由 在Ionic6和Angular8项目中使用组件时出现错误:Error: No component factory found for LoginComponent. Did you add it to NgModule.entryComponents? 在我的上一篇文章&#xff1a;移动开发&#xff1a;Ionic框架实现注册与登录功能中&#xff0c;实现软件运行时弹出登…

new一个Object对象占用多少内存?

Java的自动内存管理机制省却了很多编码工作&#xff0c;大大地提高了Java的生产力&#xff0c;而且JVM的性能也越来越好&#xff0c;特别是G1的出现&#xff0c;改善了垃圾回收中stop the world的状况。 也许很多人都没有考虑过这个问题&#xff0c;new一个Object对象到底占用多…

[Domino]“java.lang.ClassCastException:lotus.domino.cso.Item”异常解决办法

[Domino] “java.lang.ClassCastException&#xff1a;lotus.domino.cso.Item”异常解决办法编写者日期关键词郑昀ultrapower2005-6Java Domino RichTextItem通过Domino的Document.getFirstItem("Body")是可以获取当前邮件的Body字段&#xff0c;并试图直接转换为Ric…

命令行基础知识:使用ImageMagick调整图像大小

If you’ve ever done programmatic image manipulation (especially in PHP) you have probably encountered the ImageMagick library or it’s major fork, GraphicsMagick. In addition to being able to leverage it’s power from many popular programming languages, y…

什么是华为认证?HCIA HCIP HCIE分别是什么认证体系?

一、华为公司简介 华为创立于1987年&#xff0c;是全球领先的ICT (信息与通信&#xff09;基础设施和智能终端提供商&#xff0c;我们致力于把数字世界带入每个人、 每个家庭、每个组织&#xff0c;构建万物互联的智能世界。目前华为有18.8万员工&#xff0c;业务遍及170多个国…

Sync4j的Nokia手机实践结果

配置好Sync4j服务器后&#xff0c;我在Nokia手机上设置好同步&#xff0c;准备和这个远端服务器进行联系人的同步。下面的日志记录了两次失败的过程&#xff1a;第一次手机登录&#xff1a;由于Sync4j对设备要求事先在管理控制台上配置好&#xff0c;并添加规则&#xff0c;才能…