(十四)登陆注册 逻辑二 前端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) 如果今天有一张表上面有很多职务的信息 我们可以通过使用外键的方式去将两张表产生关联 这样的好处能够节省空间,比方说你今天的职务名称很长,在一张表中就要重复的去写这个职务 ...
随机推荐
- centos7 安装pip2和pip3
linux pip2 安装cd /usr/bin yum install -y epel-release yum install -y python-pip _____________________ ...
- 大端(bigend)与小端(littleend)
大端:是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中: 小端:是指数据的高位保存在内存的高地址中,而数据的高 ...
- idea垂直分屏
1.找到分屏功能 搜索keymap(注意大小写): 2.Split Vertically 垂直分屏/Split Horizontally 水平分屏 3.添加快捷方式
- C:gcc的基本使用
分布编译 预处理:gcc -E hello.c -o hello.i 编 译:gcc -S hello.i -o hello.s 汇 编:gcc -c hello.s -o hello.o 链 接:g ...
- Linux 笔记:虚拟控制台
登录后按Alt+F2键这时又可以看到"login:"提示符,这个就是第二个虚拟控制台. 一般新安装的Linux有四个虚拟控制台,可以用Alt+F1~Alt+F4来访问. 虚拟控制台 ...
- kafka单机搭建
1.安装jdk1.8和zookeeper 2.下载kafka上传服务器 下载地址:http://archive.apache.org/dist/kafka/0.10.0.0/kafka_2.11-0. ...
- kibana 开发工具介绍
kibana上查看es集群节点信息 get /_cat/nodes?v ip heap.percent ram.percent cpu load_1m load_5m load_15m node.ro ...
- js脚本中执行java后台代码
使用场景:关闭页面弹窗时执行sql语句. 其实js里执行sql语句有多种方式. 方式一:直接在js代码里调用sql语句,原则上不能使用,因为这将sql直接暴露在客户端,安全性极差. 方式二:在js里运 ...
- #P2010 回文日期 的题解
题目描述 在日常生活中,通过年.月.日这三个要素可以表示出一个唯一确定的日期. 牛牛习惯用88位数字表示一个日期,其中,前44位代表年份,接下来22位代表月 份,最后22位代表日期.显然:一个日期只有 ...
- 【网摘】模仿 placeholder 属性
/*为空时显示 element attribute content*/ .project-task-edit .subtask-body-txt:empty:before { content: att ...