通常意义上,一个互联网 APP 中的数据主自与服务器的交互,可是对于有些数据,咱们但愿获取到它们之后能保存,并在全局环境使用,好比用户数据——咱们不但愿在每一个页面都从服务器拉取一遍。这时咱们就能够利用 HTML5 的 localStorage API —— 一个比 cookie 更稳定和高效,且跨浏览的一种存储机制。咱们能够尝试模拟登陆的流程来体验这一 API 的使用。html
在 pages 文件夹建立登陆页面目录 login,包括 login.ts 和 login.html ,别忘了在 app.module.ts 注册页面。浏览器
在 login.ts 定义表单的数据模型,把用户名和密码封装在一个对象中,未来发送 post 请求时能够直接调用。服务器
export class LoginPage { userData:any{ username:'', password:'' } ...
在 login.html 编写表单模板,并使用 [(ngModel)] 将每一个项目绑定在数据模型上。cookie
不少APP是须要强制登陆的,用户进入这类 APP 时,就会直接进入登陆页面,只有登陆成功后才会跳转到首页。
若是你用 tabs 模板建立了 ionic 项目,那么APP是默认进入到 Tabs 页的,咱们要作一些改造让它默认进入到登陆页面。app
app.component.ts 定义了整个 APP 的根页面,咱们须要把根页面替换位登陆页面。ionic
import { LoginPage } from '../pages/login/login';post
rootPage:any = LoginPage;测试
运行 server 后,能够看到应用直接进入到了登陆界面this
在 LoginPage 类中建立 login 方法,模拟登陆的过程:spa
login(){ //模拟验证登陆 if(this.userData.username==='test' && this.userData.password==='123456'){ //将用户名储存到 localStorage 中 window.localStorage.setItem('username',this.userData.username); this.navCtrl.setRoot(TabsPage); } }
假设用户名为 test,密码为 123456,当二者匹配时,将用户名存储到 Storage 中,并跳转到 Tabs 页面。
注意:
import { TabsPage } from '../tabs/tabs';
constructor(private navCtrl:NavController){}
将组件中的 click 方法绑定到模板按钮的事件中:
<button ion-button block (click)="login()">登陆</button>
Angular中 (事件名) 用于将模板上的元素和绑定组件中的方法相绑定,即将事件流从模板传到组件,由于组件里的方法对外不可见,因此不要使用 onclick 来操做。
在 [来扯点ionic3[2] 页面一线牵 珍惜这段缘](http://www.jianshu.com/p/de40... NavController 的 push 方法跳转页面,为什么这里使用的倒是另外一个方法 setRoot 呢?由于这两种方法的原理不一样,push是将新页面推送到页面栈中,新页面能够 pop 回旧页面;而 setRoot 是将原有的根页面替换成新页面,至关于换了一个新的页面栈,原有的页面已经被回收掉了,这时候新页面是没法 pop 回旧页面的。
在界面表现上,若是是经过 push 进 Tabs 页面,能够经过 Android 设备上的返回按钮回到登陆页面,这显然不符合咱们的操做逻辑。
登陆成功后,咱们要在其它页面上使用用户的数据,方法很简单,使用 getItem 将其提取出来就行。
export class HomePage { username:string=""; constructor(public navCtrl: NavController) {} ionViewWillEnter(){ this.username=window.localStorage.getItem('username'); } }
将用户名输出到模板中:
<ion-content padding> <p>欢迎你:{{username}}</p> </ion-content>
在测试过程当中,你会发现,浏览器的每次刷新都要从新登陆。这时,就须要修改在此修改 app.component.ts 添加一个钩子:判断 Storage 中存在 username 与否,定义不一样的 rootPage :
export class MyApp { rootPage:any; constructor(platform: Platform, statusBar: StatusBar, splashScreen: SplashScreen) { if(window.localStorage.getItem('username')) this.rootPage=TabsPage; else this.rootPage=LoginPage; platform.ready().then(() => { ...
再刷新页面能够发现,APP 直接进入首页了。
在首页添加注销按钮,清除 Storage 中的 username,并跳转回登陆页面。
home.ts
logout(){ window.localStorage.removeItem('username'); this.navCtrl.setRoot(LoginPage); }
home.html
<ion-content padding> <p>欢迎你:{{username}}</p> <button ion-button round (click)="logout()">注销</button> </ion-content>