我们在点击登录的时候  成功之后跳转到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但是我们在登录成功之后应该拿到用户的头像和用户的名称

继续

这个还是回到登录页面 输入了手机号和验证码 在点击登录的时候获取用户的头像和用户的名称存在内存一份存在文件一份

官方不推荐使用的方法

<button class="submit" bindtap="onClickLogin">登录 | 注册</button>
 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的更多相关文章

  1. 进击的Python【第十四章】:Web前端基础之Javascript

    进击的Python[第十四章]:Web前端基础之Javascript 一.javascript是什么 JavaScript 是一种轻量级的编程语言. JavaScript 是可插入 HTML 页面的编 ...

  2. Android项目实战(四十四):Zxing二维码切换横屏扫描

    原文:Android项目实战(四十四):Zxing二维码切换横屏扫描 Demo链接 默认是竖屏扫描,但是当我们在清单文件中配置横屏显示的时候: <activity android:name=&q ...

  3. SpringBoot之网站的登陆注册逻辑

    网站的登录注册实现逻辑 该文章主要是为了整理之前学习项目中的知识点,并进行一定程度的理解. 技术列表: SpringBoot MySQL redis JWT 用户登录逻辑: 首先打开前端登录页面,F1 ...

  4. Linux命令(二十四) 磁盘管理命令(二) mkfs,mount

    一.格式化文件系统 mkfs 当完成硬盘分区以后要进行硬盘的格式化,mkfs系列对应的命令用于将硬盘格式化为指定格式的文件系统.mkfs 本身并不执行建立文件系统的工作,而是去调用相关的程序来执行.例 ...

  5. SpringCloud学习成长之十四 服务注册(consul)

    这篇文章主要介绍 spring cloud consul 组件,它是一个提供服务发现和配置的工具.consul具有分布式.高可用.高扩展性. 一.consul 简介 consul 具有以下性质: 服务 ...

  6. ios基础篇(十四)——UITableView(二)属性及基本用法

    上一篇说了UITableView的重用机制,让我们对UITableView有了简单了解,下面说说UITableView的属性及常见方法. 一.属性 1.frame:设置控件的尺寸和大小 2.backg ...

  7. 大数据入门第二十四天——SparkStreaming(二)与flume、kafka整合

    前一篇中数据源采用的是从一个socket中拿数据,有点属于“旁门左道”,正经的是从kafka等消息队列中拿数据! 主要支持的source,由官网得知如下: 获取数据的形式包括推送push和拉取pull ...

  8. Android笔记三十四.Service综合实例二

    综合实例2:client訪问远程Service服务 实现:通过一个button来获取远程Service的状态,并显示在两个文本框中. 思路:如果A应用须要与B应用进行通信,调用B应用中的getName ...

  9. Python学习日记(三十四) Mysql数据库篇 二

    外键(Foreign Key) 如果今天有一张表上面有很多职务的信息 我们可以通过使用外键的方式去将两张表产生关联 这样的好处能够节省空间,比方说你今天的职务名称很长,在一张表中就要重复的去写这个职务 ...

随机推荐

  1. LOJ 6279 数列分块入门3

    嗯... 题目链接:https://loj.ac/problem/6279 这道题在分块的基础上用vc数组记录,然后最后分三块,两边暴力枚举找前驱,中间lower_bound找前驱. AC代码: #i ...

  2. 洛谷 P3956 棋盘(记忆化搜索)

    嗯... 题目链接:https://www.luogu.org/problem/P3956 这是一道比较好搜的题,注意一些剪枝.预处理和魔法的处理问题(回溯). AC代码: #include<c ...

  3. jq 获取input多选框

    1.获取checkbox选中个数 $("input[name='ckb-jobid']:checked").length $("input[type='checkbox' ...

  4. C语言:将3*5矩阵中第k列的元素左移到第0列,第k列以后的每列元素依次左移,原来左边的各列依次绕到右边。-在m行m列的二维数组中存放如下规律的数据,

    //将3*5矩阵中第k列的元素左移到第0列,第k列以后的每列元素依次左移,原来左边的各列依次绕到右边. #include <stdio.h> #define M 3 #define N 5 ...

  5. idea抽取方法

    问题:有时候一个方法里面嵌套了很多逻辑,想拆分为多个方法方便调用:或者一个方法复用性很高,这时,这个方法嵌套在局部方法里面肯定是不方便的,如何快速抽取出这个方法? public class Demo ...

  6. 5_7 丑数(UVa136)<priority_queue的使用>

    Ugly Number的定义为:该数之质因数必须为2,3或5,当然了,依照惯例,1也算是Ugly Number.在此列举一串数列:1,2,3,4,5,6,8,9,10,12,15这些就是前11个Ugl ...

  7. JAVA(1)之关于对象数组作形参名的方法的使用

    public class Test{ int tour; public static void cs(Test a[]) { for (int i = 0; i < a.length; i++) ...

  8. linux--网络管理-ifconfig,route,netstat,ip,ss,dns,主机名网卡名修改bond

    cat /etc/services 查看常见端口对应的服务 查一查某个端口号,是哪个进程在用  lsof  -i :6010 49152-65535:动态端口或私有端口,客户端程序随机使用的端口  其 ...

  9. Spark操作MySQL,Hive并写入MySQL数据库

    最近一个项目,需要操作近70亿数据进行统计分析.如果存入MySQL,很难读取如此大的数据,即使使用搜索引擎,也是非常慢.经过调研决定借助我们公司大数据平台结合Spark技术完成这么大数据量的统计分析. ...

  10. springMVC是如何实现参数封装和自动返回Json的

    HTTP 请求和响应是基于文本的,意味着浏览器和服务器通过交换原始文本进行通信.但是,使用 Spring,controller 类中的方法返回纯 ‘String’ 类型和域模型(或其他 Java 内建 ...