资讯专栏INFORMATION COLUMN

来扯点ionic3[7] LocalStorage的使用—以登录和注销为例

lushan / 2839人阅读

摘要:我们可以尝试模拟登录的流程来体验这一的使用。制作模板并完成数据绑定在编写表单模板,并使用将每个项目绑定在数据模型上。清除中的用户信息在首页添加注销按钮,清除中的,并跳转回登录页面。

一般意义上,一个互联网 APP 中的数据主自与服务器的交互,但是对于有些数据,我们希望获取到它们以后能保存,并在全局环境使用,比如用户数据——我们不希望在每个页面都从服务器拉取一遍。这时我们就可以利用 HTML5 的 localStorage API —— 一个比 cookie 更稳定和高效,且跨浏览的一种存储机制。我们可以尝试模拟登录的流程来体验这一 API 的使用。

创建登录页面

在 pages 文件夹创建登录页面目录 login,包括 login.ts 和 login.html ,别忘了在 app.module.ts 注册页面。

一个简单的登录表单 定义数据模型

在 login.ts 定义表单的数据模型,把用户名和密码封装在一个对象中,将来发送 post 请求时可以直接调用。

export class LoginPage {

    userData:any{
        username:"",
        password:""
    }

    ...
制作模板并完成数据绑定

在 login.html 编写表单模板,并使用 [(ngModel)] 将每个项目绑定在数据模型上。

需要先做一些小改造

很多APP是需要强制登录的,用户进入这类 APP 时,就会直接进入登录页面,只有登录成功后才会跳转到首页。
如果你用 tabs 模板创建了 ionic 项目,那么APP是默认进入到 Tabs 页的,我们要做一些改造让它默认进入到登录页面。

修改 app.component.ts

app.component.ts 定义了整个 APP 的根页面,我们需要把根页面替换位登录页面。

引入LoginPage

import { LoginPage } from "../pages/login/login";

将 rootPage 改为 LoginPage

rootPage:any = LoginPage;

运行 server 后,可以看到应用直接进入到了登录界面

利用 LocalStorage 存储登录状态 创建 login 方法

在 LoginPage 类中创建 login 方法,模拟登录的过程:

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 页面。

注意:

引入 TabsPage

import { TabsPage } from "../tabs/tabs";

把 NavController 注入到类中:

constructor(private navCtrl:NavController){}

绑定click事件

将组件中的 click 方法绑定到模板按钮的事件中:

Angular中 (事件名) 用于将模板上的元素和绑定组件中的方法相绑定,即将事件流从模板传到组件,因为组件里的方法对外不可见,所以不要使用 onclick 来操作。

为什么用 setRoot 而不是 push

在 [来扯点ionic3[2] 页面一线牵 珍惜这段缘](http://www.jianshu.com/p/de40... NavController 的 push 方法跳转页面,为何这里使用的却是另一个方法 setRoot 呢?因为这两种方法的原理不同,push是将新页面推送到页面栈中,新页面可以 pop 回旧页面;而 setRoot 是将原有的根页面替换成新页面,相当于换了一个新的页面栈,原有的页面已经被回收掉了,这时候新页面是无法 pop 回旧页面的。

在界面表现上,如果是通过 push 进 Tabs 页面,可以通过 Android 设备上的返回按钮回到登录页面,这显然不符合我们的操作逻辑。

在首页提取 Storage 的数据

登录成功后,我们要在其它页面上使用用户的数据,方法很简单,使用 getItem 将其提取出来就行。

export class HomePage {

    username:string="";

  constructor(public navCtrl: NavController) {}

  ionViewWillEnter(){
      this.username=window.localStorage.getItem("username");
  }

}

将用户名输出到模板中:


  

欢迎你:{{username}}

利用登录状态进行页面跳转

在测试过程中,你会发现,浏览器的每次刷新都要重新登录。这时,就需要修改在此修改 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 中的用户信息

在首页添加注销按钮,清除 Storage 中的 username,并跳转回登录页面。
home.ts

logout(){
      window.localStorage.removeItem("username");
      this.navCtrl.setRoot(LoginPage);
  }

home.html


  

欢迎你:{{username}}

其它

LocalStorage 的数据是没有过期时间的,只要它没有被删除,就会永久地储存在 Storage 中。如果你希望数据在一定时间内失效,可以使用 SessionStorage 来替代。

LocalStorage 和 SessionStorage 的存储空间只有 5MB,请不要存储大量的数据。

在新版 iOS 中,LocalStorage 可能会在系统清理内存时被清除,在 Android 中也可能发生 LocalStorage 被清楚的情况。如果你需要更好地存储方案,可以考虑使用 SQLlite 来替代。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/56871.html

相关文章

  • 扯点ionic3[6] 继续上手表单:魔法般双向数据绑定

    摘要:其中就是将表单和页面组件绑定在一起的桥梁,当一个表单被绑定到某个属性成员上时,它的就自然等于这个属性的值。 showImg(https://segmentfault.com/img/remote/1460000012146194?w=650&h=350); 相关章节:[来扯点ionic3[5] 轻松上手表单:这些组件可以玩一年](http://www.jianshu.com/p/b2a...

    ermaoL 评论0 收藏0
  • 扯点ionic3[5] 轻松上手表单:这些组件可玩一年

    摘要:基本使用请选择选项选项在标签上使用指令,表示其内部的为同一组。标题按钮按钮和上述控件不同,它不使用来构件,而是使用普通的标签配合指令来实现效果并且按钮可以不放置在容器中。 showImg(https://segmentfault.com/img/remote/1460000012146194?w=650&h=350); 表单几乎是每一个应用程序中必不可少的一部分,在各类 HTML 教材...

    endless_road 评论0 收藏0
  • 扯点ionic3[1] 创建一个新页面

    摘要:创建一个页面组件在中,页面是以组件的形式存在的,每个页面都是一个独立的组件。我们现在需要建一个名为的页面,我们现在文件夹下新建一个文件夹,并创建一以结尾的同名文件。类的命名在中,页面类采用页面名的命名方式,首字母大写,如等。 showImg(https://segmentfault.com/img/remote/1460000012135849?w=650&h=350); 目录 创建一...

    superw 评论0 收藏0
  • 扯点ionic3[4] 结构型指令列表渲染

    摘要:雷神上映已经一周,但因为各种原因还没来得去送票房,有多年不见的班纳和洛基娘娘,期待他们在诸神黄昏和明年无限战争中的表现。至此,准备就绪,开始了解第一个指令。参考文档结构型指令 showImg(https://segmentfault.com/img/remote/1460000012145196?w=650&h=350); 《雷神3》上映已经一周,但因为各种原因还没来得去送票房,有多年...

    sean 评论0 收藏0
  • 扯点ionic3[4] 结构型指令列表渲染

    摘要:雷神上映已经一周,但因为各种原因还没来得去送票房,有多年不见的班纳和洛基娘娘,期待他们在诸神黄昏和明年无限战争中的表现。至此,准备就绪,开始了解第一个指令。参考文档结构型指令 showImg(https://segmentfault.com/img/remote/1460000012145196?w=650&h=350); 《雷神3》上映已经一周,但因为各种原因还没来得去送票房,有多年...

    lowett 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<