Ionic—登录组件开发

一.开发用户未登录的页面

  • app.component.*文件主要用于定义app全局的所有组件

1.需求一:设置组件主题样式

  • 组件自身的样式定义在自己的scss文件中,希望全局生效的内容定义到全局的theme.scss文件中

  • 在theme文件下创建light.scss文件,用于设定白天模式的样式

    • 实例代码[important表示强制覆盖]

      ion-content {background-color:#e5e6e8!important;
      }
      
    • 需要在variables.scss文件中使用@import 'light'导入自定义的样式

  • 在theme文件下创建dark.scss文件,用于设定夜间模式的样式

2.需求二:调整“更多”页面

  • 设计流程

    • 修改项目title
    • 使用ion-card添加more页面内部内容
    • 使用ion-button添加对应的按钮
    • 查看CSS Utilities对应设定好的CSS样式并使用
  • 实例代码

    • more.page.html
    <ion-header><ion-navbar><ion-title>Moreion-title>ion-navbar>
    ion-header>
    <ion-content><ion-card><ion-card-header text-center>Log in 'Free Skin' and experience more features...ion-card-header><ion-card-content text-center><button ion-button outline> Sign in / Sign up button>ion-card-content>ion-card>
    ion-content>
    
    • more.page.scss
    page-more {ion-card {margin: 0!important;width: 100%!important;}
    }
    
  • 注意全局样式对组件的影响,即组件上自带的样式,可以通过手动删除或样式覆盖进行自定义设置

3.需求三:开发Rest模块,处理网络请求

  • 提示:VSCode生成注释的插件 Document this

  • 生成一个rest的service用于处理网络请求:ionic g service rest

  • 添加内容【需要在module中注册HttpModule】

    import { HttpClient } from '@angular/common/http';
    import { Injectable } from '@angular/core';
    import { Observable } from 'rxjs/Observable';/*Generated class for the RestProvider provider.See https://angular.io/guide/dependency-injection for more info on providersand Angular DI.
    */
    @Injectable()
    export class RestProvider {constructor(public http: HttpClient) {//console.log('Hello RestProvider Provider');}//发送get请求private getRequest(url:string):Observable{return this.http.get(url);}}
    

二.开发用户登录页面

1.需求一:开发用户登录首页

  • 为登录注册按钮添加监听事件

  • 导入并使用ModalController

  • 对按钮设置监听create并present modal

  • 实例代码

    • more.html
    <ion-header><ion-navbar><ion-title>Moreion-title>ion-navbar>
    ion-header>
    <ion-content><ion-card><ion-card-header text-center>Log in 'Free Skin' and experience more features...ion-card-header><ion-card-content text-center><button ion-button outline (click)="presentLoginModal()"> Sign in / Sign up button>ion-card-content>ion-card>
    ion-content>
    
    • more.ts
    import { Component } from '@angular/core';
    import { IonicPage, NavController, NavParams, ModalController } from 'ionic-angular';
    import { LoginComponent } from '../../components/login/login';@Component({selector: 'page-more',templateUrl: 'more.html',
    })
    export class MorePage {constructor(public navCtrl: NavController, public navParams: NavParams,public modalCtrl: ModalController) {}presentLoginModal() {const modal = this.modalCtrl.create(LoginComponent);modal.present();}
    }
    
    • login.html

      • showWhen属性:什么设备显示就添加什么设备的字段

        <span ion-text color="primary" showWhen="ios">取消span>
        <ion-icon name="md-close" showWhen="android">ion-icon>
        
      • 实例代码

        <ion-header><ion-navbar><ion-title>Loginion-title><ion-buttons><button ion-button><span ion-text color="primary" showWhen="ios">Cancelspan><ion-icon name="md-close" showWhen="android">ion-icon>button>ion-buttons>ion-navbar>
        ion-header>
        <ion-content padding><ion-list><ion-item><ion-label stacked>Usernameion-label><ion-input type="text">ion-input>ion-item><ion-item><ion-label stacked>Passwordion-label><ion-input type="password">ion-input>ion-item>ion-list><div padding><button ion-button color="primary" block>Loginbutton>div><div text-center><button ion-button color="primary" outline>Sign upbutton>div>
        ion-content>
        

2.需求二:对按钮添加取消的监听事件

  • 给按钮的button添加取消的监听事件dismiss()[使用ViewController]

  • 给username和password进行双向绑定,并给登录添加监听事件login()

  • 声明baseUI.ts文件用于声明基础组件,方便代码的复用

  • 实例代码

    • baseUI.ts

      import { Loading, LoadingController } from "ionic-angular";export abstract class BaseUI {constructor(){}showLoading(loadingCtrl:LoadingController,message:string):Loading{let loader = loadingCtrl.create({content:message,dismissOnPageChange:true})loader.present();return loader;}
      }
      
    • login.html

      <ion-header><ion-navbar><ion-title>Loginion-title><ion-buttons><button ion-button (click)="dismiss()"><span ion-text color="primary" showWhen="ios">Cancelspan><ion-icon name="md-close" showWhen="android">ion-icon>button>ion-buttons>ion-navbar>
      ion-header>
      <ion-content padding><ion-list><ion-item><ion-label stacked>Usernameion-label><ion-input type="text" [(ngModel)]="username">ion-input>ion-item><ion-item><ion-label stacked>Passwordion-label><ion-input type="password" [(ngModel)]="password">ion-input>ion-item>ion-list><div padding><button ion-button color="primary" block (click)="login()">Loginbutton>div><div text-center><button ion-button color="primary" outline>Sign upbutton>div>
      ion-content>
      
    • login.ts

      import { Component } from '@angular/core';
      import { NavController, NavParams, ViewController, LoadingController } from 'ionic-angular';
      import { BaseUI } from '../../common/baseUI';/*** Generated class for the LoginPage page.** See https://ionicframework.com/docs/components/#navigation for more info on* Ionic pages and navigation.*/@Component({selector: 'page-login',templateUrl: 'login.html',
      })
      export class LoginPage extends BaseUI {username:string = '';password:string = '';constructor(public navCtrl: NavController, public navParams: NavParams,public viewController:ViewController,public loadingController:LoadingController) {super();}dismiss() {this.viewController.dismiss();}login() {var loading = super.showLoading(this.loadingController,"Loading...");//调用API}}
      

3.需求三:模拟发送请求实现Toast

  • 给Baseui.ts添加显示toast功能

  • 通过setTimeout模拟延时登录

  • 实例代码

    • Baseui.ts

      import { Loading, LoadingController, ToastController } from "ionic-angular";export abstract class BaseUI {constructor(){}showLoading(loadingCtrl:LoadingController,message:string):Loading{let loader = loadingCtrl.create({content:message,dismissOnPageChange:true})loader.present();return loader;}showToast(toastCtrl:ToastController,message:string){let toast = toastCtrl.create({message:message,duration:3000});toast.present();return toast;}
      }
      
    • login.html

      <ion-header><ion-navbar><ion-title>Loginion-title><ion-buttons><button ion-button (click)="dismiss()"><span ion-text color="primary" showWhen="ios">Cancelspan><ion-icon name="md-close" showWhen="android">ion-icon>button>ion-buttons>ion-navbar>
      ion-header>
      <ion-content padding><ion-list><ion-item><ion-label stacked>Usernameion-label><ion-input type="text" [(ngModel)]="username">ion-input>ion-item><ion-item><ion-label stacked>Passwordion-label><ion-input type="password" [(ngModel)]="password">ion-input>ion-item>ion-list><div padding><button ion-button color="primary" block (click)="login()">Loginbutton>div><div text-center><button ion-button color="primary" outline>Sign upbutton>div>
      ion-content>
      
    • login.ts

      import { Component } from '@angular/core';
      import { NavController, NavParams, ViewController, LoadingController, ToastController } from 'ionic-angular';
      import { BaseUI } from '../../common/baseUI';@Component({selector: 'page-login',templateUrl: 'login.html',
      })
      export class LoginPage extends BaseUI {username:string = '';password:string = '';constructor(public navCtrl: NavController, public navParams: NavParams,public viewController:ViewController,public loadingController:LoadingController,public toastController:ToastController) {super();}dismiss() {this.viewController.dismiss();}login() {let loading = super.showLoading(this.loadingController,"Loading...");//调用APIsetTimeout(()=>{loading.dismiss();if(Math.random()*100>50){//视作登录成功}else{//视作登录失败let toast = super.showToast(this.toastController,"Your username or password is wrong!");}},2000);}
      }
      

4.需求四:开发登录成功后的页面

  • 使用storage实现页面信息存储

    • 安装storage:npm install --save @ionic/storage
    • 需要storage的地方引入:import { Storage } from '@ionic/storage';
    • storage设置值:storage.set('键','值')
    • storage获取值:storage.get('键').then((val)=>{处理逻辑})
    • 在app.modules.ts中引入IonicStorageModule:import {IonicStorageModule} from '@ionic/storage';IonicStorageModule.forRoot()
  • 实例代码

    • more.ts

      import { Component } from '@angular/core';
      import { NavController, NavParams, ModalController } from 'ionic-angular';
      import { LoginPage } from '../login/login';
      import { Storage } from '@ionic/storage';@Component({selector: 'page-more',templateUrl: 'more.html',
      })
      export class MorePage {//判断是否登录isLogined:boolean = false;constructor(public navCtrl: NavController, public navParams: NavParams,public modalCtrl: ModalController,public storage: Storage) {}presentLoginModal() {const modal = this.modalCtrl.create(LoginPage);modal.present();}//ionic生命周期方法:当页面进入完成后调用ionViewDidEnter() {this.loadUserPage();}//加载用户信息loadUserPage() {this.storage.get('token').then((val)=>{if(val!=null){this.isLogined = true;}else{this.isLogined = false;}})}
      }
      
    • more.html

      More
      Log in 'Free Skin' and experience more features...Log in success.
      
      
    • login.ts

      import { Component } from '@angular/core';
      import { NavController, NavParams, ViewController, LoadingController, ToastController } from 'ionic-angular';
      import { BaseUI } from '../../common/baseUI';
      import { Storage } from '@ionic/storage';@Component({selector: 'page-login',templateUrl: 'login.html',
      })
      export class LoginPage extends BaseUI {username:string = '';password:string = '';constructor(public navCtrl: NavController, public navParams: NavParams,public viewController:ViewController,public loadingController:LoadingController,public toastController:ToastController,public storage:Storage) {super();}dismiss() {this.viewController.dismiss();}login() {let loading = super.showLoading(this.loadingController,"Loading...");//调用APIsetTimeout(()=>{//关闭loadingloading.dismiss();if(Math.random()*100>50){//视作登录成功//存储tokenthis.storage.set('token','abcdefg');//关闭当前modalthis.dismiss();}else{//视作登录失败let toast = super.showToast(this.toastController,"Your username or password is wrong!");}},2000);}
      }
      


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部