(十四)登陆注册 逻辑二 前端globalData的使用 和 Storage

我们在点击登录的时候 成功之后跳转到home
一 在全局的app.js里会有一个 globalData
因为还有其他页面也要使用 共有的数据 所有用到 globalData
App({
globalData: {
phone: null
}
})
二 登录页面
要通过 var app =getApp();来使用
var app = getApp();
pages({
onClickSubmit:function(){
wx.request({
url: 'http://127.0.0.1:8000/api/login/',
data: { phone: this.data.phone, code:this.data.code },
method: 'POST',
success: function (res) {
if (res.data.status) {
// 登陆成功 跳转home页面
app.globalData.phone = res.data.data.phone
wx.navigateBack({})
} else {
// 发送失败
wx.showToast({
title: '登陆失败',
icon: 'none',
})
}
},
})
},
})
成功之后 我们要跳转到home页面
三 home页面
前端 wxml
<view class="name" wx:if="{{phone}}">
<view>{{phone}}</view>
</view>
<view class="name" wx:else="{{phone}}"> # 进行一个判断
<navigator url="/pages/auth/auth">登录</navigator>
|
<navigator url="/pages/auth/auth">注册</navigator>
</view>
js代码
var app = getApp();
Page({ /**
* 页面的初始数据
*/
data: {
phone:null
}, /**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) { },
# onLoad和onReady 只有在第一次加载的时候才管用,每次都管用的是 onShow
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () { }, /**
* 生命周期函数--监听页面显示
*/
onShow: function () {
this.setData({
phone:app.globalData.phone
})
},
})
四 storage的使用
我们在使用全局的globalData的时候 在每次重启的时候 数据就会消失,这样的话 我们就要用到 storage
登陆页面
var app = getApp();
pages({
onClickSubmit:function(){
wx.request({
url: 'http://127.0.0.1:8000/api/login/',
data: { phone: this.data.phone, code:this.data.code },
method: 'POST',
success: function (res) {
if (res.data.status) {
// 登陆成功 跳转home页面 // 1. 在公共的app.js中调用globalData,在里面赋值(在全局变量赋值)
app.globalData.phone = res.data.data.phone // 2.在本地的storage中赋值
wx.setStorageSync('phone', res.data.data.phone) wx.navigateBack({})
} else {
// 发送失败
wx.showToast({
title: '登陆失败',
icon: 'none',
})
}
},
})
},
})
home页面
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
var phone = wx.getStorageSync('phone')
this.setData({
// phone:app.globalData.phone
phone: phone
}) },
五 全局来说
问题1 我们有很多页面 在每个页面都需要登陆者的信息 如何做
问题2 在内存存储的值和在文件存储的值 去取的时候那个快?
上面我们写的都是去文件 storage里取值
其实我们只要做到程序启动的时候去storage里取值一次,然后存在内存里即可。

看上图 我们就是在点击登录的时候 登录成功之后跳转 在跳转的时候我们往内存中写一份 往文件里写一下 调回我的页面我们选择在内存中取值
//全局app.js
App({
onLaunch: function () {
var phone = wx.getStorageSync('phone');
if(phone){
this.globalData.phone=phone;
}
},
globalData: {
phone: null
}
})
// home.js
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
this.setData({
phone:app.globalData.phone
})
其实向上面基本上就差不多了 但是我们还可以在更改
// auth.js
onClickSubmit:function(){
wx.request({
url: 'http://127.0.0.1:8000/api/login/',
data: { phone: this.data.phone, code:this.data.code },
method: 'POST',
success: function (res) {
if (res.data.status) { // 初始化执行initUserinfo函数
app.initUserinfo(res.data.data);
// // 登陆成功 跳转home页面
// // 1. 在公共的app.js中调用globalData,在里面赋值(在全局变量赋值)
// app.globalData.phone = res.data.data.phone // // 2.在本地的storage中赋值
// wx.setStorageSync('phone', res.data.data.phone) wx.navigateBack({})
} else {
// 发送失败
wx.showToast({
title: '登陆失败',
icon: 'none',
})
}
},
})
},
上面标蓝色的代码 我们拿到 全局的app.js中
//app.js
App({
onLaunch: function () {
var phone = wx.getStorageSync('phone');
if(phone){
this.globalData.phone=phone;
}
},
globalData: {
phone: null
},
initUserinfo:function(res){
// 登陆成功 跳转home页面
// 1. 在公共的app.js中调用globalData,在里面赋值(在全局变量赋值)
app.globalData.phone = res.phone // 2.在本地的storage中赋值
wx.setStorageSync(res.phone)
}
})
再找个问题 现在只有一个phone 我们要的token啥的都没有我们要继续修改一下
//app.js
App({
onLaunch: function () {
var userinfo = wx.getStorageSync('userinfo');
if (userinfo){
this.globalData.userinfo = userinfo;
}
},
globalData: {
userinfo: null
},
initUserinfo:function(res){
// 登陆成功 跳转home页面
// 1. 在公共的app.js中调用globalData,在里面赋值(在全局变量赋值)
// app.globalData.phone = res.phone
this.globalData.userinfo=res
// 2.在本地的storage中赋值
wx.setStorageSync('userinfo',res)
}
})
// home.js
var app = getApp(); Page({ /**
* 页面的初始数据
*/
data: {
userinfo: null,
}, /**
* 生命周期函数--监听页面显示
*/
onShow: function () {
this.setData({
userinfo: app.globalData.userinfo
}) },
})
这个时候我们拿到了phone和token但是我们在登录成功之后应该拿到用户的头像和用户的名称
继续
这个还是回到登录页面 输入了手机号和验证码 在点击登录的时候获取用户的头像和用户的名称存在内存一份存在文件一份
官方不推荐使用的方法
onClickLogin:function(){
wx.request({
url: 'http://127.0.0.1:8000/api/login/',
data: { phone: this.data.phone, code:this.data.code },
method: 'POST',
success: function (res) {
if (res.data.status) {
wx.getUserInfo({
success:function(local){
// app.initUserinfo(res.data.data, local.userInfo.nickName, local.userInfo.avatarUrl);
app.initUserinfo(res.data.data, local.userInfo);
}
})
wx.navigateBack({})
} else {
// 发送失败
wx.showToast({
title: '登陆失败',
icon: 'none',
})
}
},
})
},
详见 (七)获取用户信息
官方推荐的使用方法
<button class="submit" open-type="getUserInfo" bindgetuserinfo="onClickSubmit">登录 | 注册</button>
onClickSubmit:function(e){
wx.request({
url: 'http://127.0.0.1:8000/api/login/',
data: { phone: this.data.phone, code: this.data.code },
method: 'POST',
success: function (res) {
if (res.data.status) {
app.initUserinfo(res.data.data, e.detail.userInfo);
wx.navigateBack({})
} else {
// 发送失败
wx.showToast({
title: '登陆失败',
icon: 'none',
})
}
},
})
},
六 注销
# wxml
<view class="name" wx:if="{{userinfo}}">
<view bindtap="onClickLgout">{{userinfo.nickName}}</view>
</view>
<view class="name" wx:else="{{userinfo}}">
<navigator url="/pages/auth/auth">登录</navigator>
|
<navigator url="/pages/auth/auth">注册</navigator>
</view>
onClickLgout:function(){
app.globalData.delUserinfo = null,
this.setData({
userinfo: null
})
},
//app.js
App({ delUserinfo:function(){
this.globalData.userinfo = null,
wx.removeStorage({key: 'userinfo',})
}
})
(十四)登陆注册 逻辑二 前端globalData的使用 和 Storage的更多相关文章
- 进击的Python【第十四章】:Web前端基础之Javascript
进击的Python[第十四章]:Web前端基础之Javascript 一.javascript是什么 JavaScript 是一种轻量级的编程语言. JavaScript 是可插入 HTML 页面的编 ...
- Android项目实战(四十四):Zxing二维码切换横屏扫描
原文:Android项目实战(四十四):Zxing二维码切换横屏扫描 Demo链接 默认是竖屏扫描,但是当我们在清单文件中配置横屏显示的时候: <activity android:name=&q ...
- SpringBoot之网站的登陆注册逻辑
网站的登录注册实现逻辑 该文章主要是为了整理之前学习项目中的知识点,并进行一定程度的理解. 技术列表: SpringBoot MySQL redis JWT 用户登录逻辑: 首先打开前端登录页面,F1 ...
- Linux命令(二十四) 磁盘管理命令(二) mkfs,mount
一.格式化文件系统 mkfs 当完成硬盘分区以后要进行硬盘的格式化,mkfs系列对应的命令用于将硬盘格式化为指定格式的文件系统.mkfs 本身并不执行建立文件系统的工作,而是去调用相关的程序来执行.例 ...
- SpringCloud学习成长之十四 服务注册(consul)
这篇文章主要介绍 spring cloud consul 组件,它是一个提供服务发现和配置的工具.consul具有分布式.高可用.高扩展性. 一.consul 简介 consul 具有以下性质: 服务 ...
- ios基础篇(十四)——UITableView(二)属性及基本用法
上一篇说了UITableView的重用机制,让我们对UITableView有了简单了解,下面说说UITableView的属性及常见方法. 一.属性 1.frame:设置控件的尺寸和大小 2.backg ...
- 大数据入门第二十四天——SparkStreaming(二)与flume、kafka整合
前一篇中数据源采用的是从一个socket中拿数据,有点属于“旁门左道”,正经的是从kafka等消息队列中拿数据! 主要支持的source,由官网得知如下: 获取数据的形式包括推送push和拉取pull ...
- Android笔记三十四.Service综合实例二
综合实例2:client訪问远程Service服务 实现:通过一个button来获取远程Service的状态,并显示在两个文本框中. 思路:如果A应用须要与B应用进行通信,调用B应用中的getName ...
- Python学习日记(三十四) Mysql数据库篇 二
外键(Foreign Key) 如果今天有一张表上面有很多职务的信息 我们可以通过使用外键的方式去将两张表产生关联 这样的好处能够节省空间,比方说你今天的职务名称很长,在一张表中就要重复的去写这个职务 ...
随机推荐
- selenium+python实现自动化登录
工作需要实现一个微博自动登录的操作,在网上差了一些资料,决定使用selenium+python实现 selenium 是一个web的自动化测试工具,主流一般配合java或者python使用,我这里使用 ...
- 大端(bigend)与小端(littleend)
大端:是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中: 小端:是指数据的高位保存在内存的高地址中,而数据的高 ...
- 最长递增子序列-Hdu 1257
最少拦截系统 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- 操作系统OS - 进程的状态切换
- Springboot学习:Web开发介绍
简介 使用SpringBoot: 1).创建SpringBoot应用,选中我们需要的模块: 2).SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置就可以运行起来 3).自 ...
- 洛谷P1991 无线通讯网(最小生成树性质+连通块)
题目描述 国防部计划用无线网络连接若干个边防哨所.2 种不同的通讯技术用来搭建无线网络: 每个边防哨所都要配备无线电收发器:有一些哨所还可以增配卫星电话. 任意两个配备了一条卫星电话线路的哨所(两边都 ...
- leetcode 0218
目录 ✅ 1200. 最小绝对差 描述 解答 cpp py ✅ 897. 递增顺序查找树 描述 解答 cpp 指针问题? fuck ptr py ✅ 183. 从不订购的客户 描述 解答 sql to ...
- 【PAT甲级】1051 Pop Sequence (25 分)(栈的模拟)
题意: 输入三个正整数M,N,K(<=1000),分别代表栈的容量,序列长度和输入序列的组数.接着输入K组出栈序列,输出是否可能以该序列的顺序出栈.数字1~N按照顺序随机入栈(入栈时机随机,未知 ...
- 【PAT甲级】1044 Shopping in Mars (25 分)(前缀和,双指针)
题意: 输入一个正整数N和M(N<=1e5,M<=1e8),接下来输入N个正整数(<=1e3),按照升序输出"i-j",i~j的和等于M或者是最小的大于M的数段. ...
- location练习!(重点)
写location最重要的就是hosts文件,添加一次域名跳转就得添加一条hosts文件 hosts文件: 192.168.200.120 www.a.com 192.168.200.119 www. ...