一.用户头像和个人信息布局开发
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(); } }