我们在点击登录的时候  成功之后跳转到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. 第八届极客大挑战 Web-php绕过

    0x01.web-PHP的悖论1 题目: 链接:http://game.sycsec.com:2009/10111.php 解题思路: 1.首先,web对于选择二进制方向的我这个菜鸡绝对是十分懵逼的, ...

  2. idea新建maven project工程

    1.new project: 2.新建在main 下新建 java directory 并mark as  source root,这里我已经makr过java目录所以以showfor做演示: 3.新 ...

  3. SQL Server 2014安装(windows10)

    SQL Server 2014下载地址: 链接:https://pan.baidu.com/s/19_FAhoQxnxkTO_9e-e7weA 提取码:rid7

  4. Springboot学习:介绍与HelloWorld

    1. 什么是 Spring boot Spring Boot来简化Spring应用开发,约定大于配置,去繁从简,just run就能创建一个独立的,产品级别的应用 整个Spring技术栈的一个大整合 ...

  5. centosflask+uWSGI+nginx部署

    centosflask+uWSGI+nginx部署 1.      概念 Flask自带webserver--Werkzeug,可以搭建服务,运行网站.但在开发时,一般会用专业的--uWSGI. 另外 ...

  6. 11. 搭建一个完整的K8S集群

    11. 搭建一个完整的Kubernetes集群 1. kubectl的命令遵循分类的原则(重点) 语法1: kubectl 动作 类 具体的对象 例如: """ kube ...

  7. IPSec的链路和设备备份

    链路备份的IPSec VPN和设备备份的IPSec VPN:首先实验的是链路备份的  IPSec VPN,下面是实验拓扑: IP地址配置:R1(Branch):Branch(config-if)#ip ...

  8. Kafka 消息的消费原理

    https://www.cnblogs.com/huxi2b/p/6061110.html 1.老版本的kafka的offset是维护在zk上的,新版本的kafka把consumer的offset维护 ...

  9. STM32F4/F7运算性能

    参考http://bbs.21ic.com/icview-1622796-1-1.html

  10. 牛客大数加法-A+B

    题目描述实现一个加法器,使其能够输出a+b的值.输入描述:输入包括两个数a和b,其中a和b的位数不超过1000位.输出描述:可能有多组测试数据,对于每组数据,输出a+b的值.示例1输入2 610000 ...