Ionic—个人信息组件开发

一.用户头像和个人信息布局开发

1.开发功能
  • 开发用户头像功能
2.实例代码
  • more.html

    <ion-header>
      <ion-navbar>
        <ion-title>More</ion-title>
      </ion-navbar>
    </ion-header>
    <ion-content>
      <div *ngIf="!isLogined">
        <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>
      </div>
      <div *ngIf="isLogined">
        <ion-list class="marginTop10px">
          <button ion-item>
            <ion-avatar item-start>
              <img src="../../assets/imgs/logo.png">
            </ion-avatar>
            <h2>
              Jack
            </h2>
            <p>Edit your user info</p>
          </button>
        </ion-list>
      </div>
    </ion-content>
    
  • more.scss

    page-more {
        ion-card {
            margin: 0!important;
            width: 100%!important;
        }
    
        .marginTop10px {
            margin-top: 10px;
        }
    }
    

二.用户头像和个人信息数据加载开发

1.开发功能
  • 发送请求获取用户头像【问题:拿到用户头像的链接后,如果是相同地址会走缓存,所以可以通过+"?"+(new Date())的方式重新获取头像,去除缓存】
  • 模拟加载用户头像即用户名
2.实例代码
  • more.ts

    import { Component } from '@angular/core';
    import { NavController, NavParams, ModalController, LoadingController, ToastController, UrlSerializer } from 'ionic-angular';
    import { LoginPage } from '../login/login';
    import { Storage } from '@ionic/storage';
    import { BaseUI } from '../../common/baseUI';
    
    @Component({
      selector: 'page-more',
      templateUrl: 'more.html',
    })
    export class MorePage extends BaseUI{
    
      //判断是否登录
      isLogined:boolean = false;
    
      //avatar url
      avatarUrl:string = "../../assets/imgs/logo.png";
      //user name
      userName:string = "Jack_Wangzhe";
    
      constructor(
        public navCtrl: NavController, 
        public navParams: NavParams,
        public modalCtrl: ModalController,
        public loadingCtrl:LoadingController,
        public toastCtrl:ToastController,
        public storage: Storage) {
          super();
      }
    
      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;
            let loading = super.showLoading(this.loadingCtrl,"Loading...");
            setTimeout(()=>{
              this.avatarUrl = "../../assets/imgs/avatar.jpg"+"?"+(new Date());
              this.userName = "Jack";
              loading.dismiss();
            },2000);
          }else{
            this.isLogined = false;
          }
        })
      }
    }
    
  • more.html

    <ion-header>
      <ion-navbar>
        <ion-title>More</ion-title>
      </ion-navbar>
    </ion-header>
    <ion-content>
      <div *ngIf="!isLogined">
        <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>
      </div>
      <div *ngIf="isLogined">
        <ion-list class="marginTop10px">
          <button ion-item>
            <ion-avatar item-start>
              <img [src]="avatarUrl">
            </ion-avatar>
            <h2>
              {{userName}}
            </h2>
            <p>Click to edit your user info</p>
          </button>
        </ion-list>
      </div>
    </ion-content>
    

三.个人信息修改页面的布局开发

1.开发功能
  • 创建用户详情页面ionic g page user,并导入app.module.ts
  • 创建more页面头像的nav导航
  • 编写用户详情页面
2.实例代码
  • more.ts

    import { Component } from '@angular/core';
    import { NavController, NavParams, ModalController, LoadingController, ToastController, UrlSerializer } from 'ionic-angular';
    import { LoginPage } from '../login/login';
    import { Storage } from '@ionic/storage';
    import { BaseUI } from '../../common/baseUI';
    import { UserPage } from '../user/user';
    
    @Component({
      selector: 'page-more',
      templateUrl: 'more.html',
    })
    export class MorePage extends BaseUI{
    
      //判断是否登录
      isLogined:boolean = false;
    
      //avatar url
      avatarUrl:string = "../../assets/imgs/logo.png";
      //user name
      userName:string = "Jack_Wangzhe";
    
      constructor(
        public navCtrl: NavController, 
        public navParams: NavParams,
        public modalCtrl: ModalController,
        public loadingCtrl:LoadingController,
        public toastCtrl:ToastController,
        public storage: Storage) {
          super();
      }
    
      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;
            let loading = super.showLoading(this.loadingCtrl,"Loading...");
            setTimeout(()=>{
              this.avatarUrl = "../../assets/imgs/avatar.jpg"+"?"+(new Date());
              this.userName = "Jack";
              loading.dismiss();
            },2000);
          }else{
            this.isLogined = false;
          }
        })
      }
      editUserInfo() {
        this.navCtrl.push(UserPage);
      }
    }
    
  • user.html

    <ion-header>
      <ion-navbar>
        <ion-title>User Detail</ion-title>
      </ion-navbar>
    </ion-header>
    
    <ion-content padding>
      <ion-list class="marginTop10px marginBottom0">
        <button ion-item (click)="editUserInfo()">
          <ion-avatar item-start>
            <img [src]="avatarUrl">
          </ion-avatar>
          <h2>
            Edit user avatar
          </h2>
        </button>
      </ion-list>
      <ion-list class="marginTop10px marginBottom0">
        <ion-item>
          <ion-label>User Name</ion-label>
          <ion-input type="text" value="{{userName}}"></ion-input>
        </ion-item>
      </ion-list>
      <div padding text-center class="paddingBottom0">
        <button ion-button color="primary" block>Save</button>
      </div>
      <div padding text-center>
        <button ion-button color="danger" block>Quit</button>
      </div>
    </ion-content>
    

四.个人信息修改页面数据加载开发

1.开发功能
  • 进入个人页面后通过网络请求获取到用户个人信息
  • 添加保存方法
  • 添加注销方法
  • 定义modal弹出页面关闭后,刷新父页面的方法【父页面函数的回调modal.onDidDismiss(()=>{...})
2.实例代码
  • more.ts

    import { Component } from '@angular/core';
    import { NavController, NavParams, ModalController, LoadingController, ToastController, UrlSerializer } from 'ionic-angular';
    import { LoginPage } from '../login/login';
    import { Storage } from '@ionic/storage';
    import { BaseUI } from '../../common/baseUI';
    import { UserPage } from '../user/user';
    
    @Component({
      selector: 'page-more',
      templateUrl: 'more.html',
    })
    export class MorePage extends BaseUI{
    
      //判断是否登录
      isLogined:boolean = false;
    
      //avatar url
      avatarUrl:string = "../../assets/imgs/logo.png";
      //user name
      userName:string = "Jack_Wangzhe";
    
      constructor(
        public navCtrl: NavController, 
        public navParams: NavParams,
        public modalCtrl: ModalController,
        public loadingCtrl:LoadingController,
        public toastCtrl:ToastController,
        public storage: Storage) {
          super();
      }
    
      presentLoginModal() {
        const modal = this.modalCtrl.create(LoginPage);
        modal.onDidDismiss(()=>{
          this.loadUserPage();
        })
        modal.present();
      }
    
      //ionic生命周期方法:当页面进入完成后调用
      ionViewDidEnter() {
        this.loadUserPage();
      }
    
      //加载用户信息
      loadUserPage() {
        this.storage.get('token').then((val)=>{
          if(val!=null){
            this.isLogined = true;
            let loading = super.showLoading(this.loadingCtrl,"Loading...");
            setTimeout(()=>{
              this.avatarUrl = "../../assets/imgs/avatar.jpg"+"?"+(new Date());
              this.userName = "Jack";
              loading.dismiss();
            },2000);
          }else{
            this.isLogined = false;
          }
        })
      }
      editUserInfo() {
        this.navCtrl.push(UserPage);
      }
    }
    
  • user.ts

    import { Component } from '@angular/core';
    import { NavController, NavParams, LoadingController, ToastController, ViewController } from 'ionic-angular';
    import { BaseUI } from '../../common/baseUI';
    import { Storage } from '@ionic/storage';
    
    @Component({
      selector: 'page-user',
      templateUrl: 'user.html',
    })
    export class UserPage extends BaseUI{
    
      //avatar url
      avatarUrl:string = "../../assets/imgs/logo.png"+"?"+(new Date());
      //user name
      userName:string = "Jack_Wangzhe";
    
      constructor(
        public navCtrl: NavController, 
        public navParams: NavParams,
        public viewCtrl: ViewController,
        public loadingCtrl: LoadingController,
        public toastCtrl: ToastController,
        public storage: Storage) {
          super();
      }
    
      //ionic生命周期方法:当页面进入完成后调用
      ionViewDidEnter() {
        this.loadUserPage();
      }
    
      //加载用户信息
      loadUserPage() {
        this.storage.get('token').then((val)=>{
          if(val!=null){
            let loading = super.showLoading(this.loadingCtrl,"Loading...");
            setTimeout(()=>{
              this.avatarUrl = "../../assets/imgs/avatar.jpg"+"?"+(new Date());
              this.userName = "Jack";
              loading.dismiss();
            },2000);
          }
        })
      }
    
      //save editing
      save() {
        //发送请求保存数据
        let loading = super.showLoading(this.loadingCtrl,"Loading...");
        setTimeout(()=>{
          super.showToast(this.toastCtrl,"Edit successful!");
          loading.dismiss();
        },2000);
      }
    
      //quit
      quit() {
        this.storage.remove('token');
        this.viewCtrl.dismiss();
      }
    }
    
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值