我们在点击登录的时候  成功之后跳转到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. redis-py相关

    一 redis客户端命令 cmd进入redis客户端管理程序路径xx:\windows redis\redis-2.4.0-win32-win64\64bit 执行:redis-cli.exe -h ...

  2. Shiro入门学习之自定义Realm实现授权(五)

    一.自定义Realm授权 前提:认证通过,查看Realm接口的继承关系结构图如下,要想通过自定义的Realm实现授权,只需继承AuthorizingRealm并重写方法即可 二.实现过程 1.新建mo ...

  3. Kosaraju's algorithm

    推荐到我的这篇博客中看完整版的. 该算法用于求解有向图的强连通分量,也就是强连通子图的个数. 算法实现摘自Kosaraju's algorithm - 百度百科: #include <iostr ...

  4. Python web在IIS上发布方法和原理

    Python web应用想要发布使用iis发布有两种方式,这篇文章就为大家介绍一下这两种方式的具体实现: 1.配置HttpPlatform程序 HttpPlatform 模块将套接字连接直接传递到独立 ...

  5. 使用scrapy-redis 搭建分布式爬虫环境

    scrapy-redis 简介 scrapy-redis 是 scrapy 框架基于 redis 数据库的组件,用于 scraoy 项目的分布式开发和部署. 有如下特征: 分布式爬取: 你可以启动多个 ...

  6. pta谁先倒

    传送门 #include <stdio.h> int main() { int x,y;//酒量 scanf("%d%d",&x,&y); int n; ...

  7. 三 模拟实现顺序表ArrayList

    /** * 顺序表,重点是数组动态扩容,插入 * 底层采用数组,长度可以动态变化,此处采用增长一倍 *  java.util.ArrayList每次增长50% *  int newCapacity = ...

  8. 深入学习二叉树(07)B树

    问题背景 在大型的数据库存储中,实现索引查找,如果采用二叉查找树的查找的话,由于节点的存储数据是有限的,这样如果数据库很大的话,就会导致树的深度过大从而造成磁盘 IO 操作过于频繁,就会造成效率低下 ...

  9. rtt学习之线程间同步与通信

    一 线程间的同步与互斥:信号量.互斥量.实践集 线程互斥是指对于临界区资源访问的排它性,如多个线程对共享内存资源的访问,生产消费型对产品的操作.临界区操作操作方法有: rt_hw_interrupt_ ...

  10. 蓝桥杯-铺瓷砖(dfs)

    问题描述 有一长度为N(1< =N< =10)的地板,给定两种不同瓷砖:一种长度为1,另一种长度为2,数目不限.要将这个长度为N的地板铺满,一共有多少种不同的铺法? 例如,长度为4的地面一 ...