微信小程序新手教程之启动页的重要性


Posted in Javascript onMarch 03, 2019

前言

启动页在APP中是个很常见的需求,为什么对于小程序来说也非常重要呢?首先我描述一下我在开发过程中遇到的一些问题以及解决的步骤,到最后为什么要加启动页,看完你就明白了。

小程序的首页需要展示用户关注的小区信息,意味着一打开小程序我就得先执行登录的逻辑,只有登录了之后才能获取用户关注的小区信息。

在小程序启动的时候自动登录,目前没获取用户信息,所以不需要用户授权,这个逻辑放在根目录下的app.js的onLaunch方法中。只要启动小程序就会执行onLaunch方法。

做完之后发现了一个很严重的问题,就是app.js的onLaunch方法确实会在小程序启动的时候执行,但是首页也会是在app.json文件的pages中第一个页面也会同时执行,它不是阻塞的。会导致一个问题就是首页获取关注信息执行完了,登录的逻辑还没完,获取不到正确的数据。

于是把登录的逻辑放到首页的onLoad方法中执行,在登录成功之后再去获取关注的数据,这样就能解决上面说的问题了。

后面又有一个需求,就是分享功能,分享出去的页面中也需要用到用户信息,这个就尴尬了,分享出去的页面,用户进入的时候还是进入的这个页面,不会执行首页的逻辑,是拿不到用户信息的。

后面想了下,还是增加一个启动页来做中转吧,登录的逻辑还是放到app.js中,只要小程序启动了就可以执行,无论是第一次进入还是通过分享的页面进入,都可以自动登录。

问题是如何实现阻塞功能,就是登录之后再去跳转到其它的页面,思路就是通过定时器的方式去检测登录状态,成功了之后再跳转。

分享也是一样,分享出去的地址不再是本页面的地址,而是启动页的地址,带一个参数,这个参数才是本页面的地址,当用户点击分享的小程序进入之后会先进入启动页,启动页中获取参数,等待登录逻辑执行完成之后,再根据参数跳转到分享的页面。

启动页代码:

onLoad: function (e) {
 var url = '/pages/index/index'
 // 分享页面参数解码
 if (e.page != undefined && e.page != "") {
  url = decodeURIComponent(e.page)
 }
 var count = 0; 
 var inter = setInterval(() => {
  count++;
  if (count > 1000) {
  clearInterval(inter);
  wx.showToast({
   title: "网络异常,请重启小程序",
   icon: 'none',
   duration: 2000
  })
  return;
  }
  var token = wx.getStorageSync("login_token");
  if (token != null && token != "") {
  clearInterval(inter);
  // 跳转到toolbar
  if (url == "/pages/index/index" || url == "/pages/city/cityAll/cityAll") {
   wx.switchTab({
   url: url
   })
  } else {
   // 跳转到普通页面
   wx.navigateTo({
   url: url,
   })
  }
  
  }
 },10);
 }

当检查超过10秒钟,登录信息还获取不到的时候就会给出提示,后续会加上一个让用户手动授权登录的页面。

这种方式勉强能实现需求,但不是最好的方式,问题一看就知道了,如果加了启动页,意味着所有的入口都变成了启动页,就没有必要通过定时去检测了,直接将登录的逻辑放到启动页中来执行,在success中在做跳转的逻辑,这样的方式才是最好的,具体代码我就不贴出来,大家明白就好。

具体的分享页面代码:

onShareAppMessage: function () {
 let that = this
 var page = encodeURIComponent('/pages/district/districtDetail/districtDetail?city=' + that.data.city + '®ion=' + that.data.region + '&districtName=' + that.data.districtName + '&estateType=' + that.data.estateType + "&isshare=1")
 return {
  title: '小区详情',
  path: '/pages/startPage/startPage?page='+page
 }
 }

重点关注isshare=1这个参数,当直接打开分享的页面时,用户点击左上角的返回按钮,基于现有的逻辑会退回到启动页,因为是从启动页中转过来的,这是有问题的,要么就去掉这个返回按钮,要么就返回到首页。

所以对于分享的页面带了一个参数识别,当是从分享页面进来的时候返回就到首页面。具体逻辑在页面的onUnload函数中,在页面卸载的时候进行跳转:

if (this.data.isshare == 1) {
  wx.switchTab({
  url: '/pages/index/index'
  })
}

以上就是启动页的作用以及需要启动页的一些背景,第一次开发小程序,总会碰到很多问题。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
仅img元素创建后不添加到文档中会执行onload事件的解决方法
Jul 31 Javascript
jQuery 淡入淡出 png图在ie8下有黑色边框的解决方法
Mar 05 Javascript
纯JavaScript实现获取onclick、onchange等事件的值
Dec 29 Javascript
jQuery插件PageSlide实现左右侧栏导航菜单
Apr 12 Javascript
javascript最基本的函数汇总
Jun 25 Javascript
dedecms页面如何获取会员状态的实例代码
Mar 15 Javascript
简单的JS轮播图代码
Jul 18 Javascript
JavaScript实现的鼠标响应颜色渐变效果完整实例
Feb 18 Javascript
vue动态路由配置及路由传参的方式
May 23 Javascript
JS实现HTML页面中动态显示当前时间完整示例
Jul 30 Javascript
Vue项目history模式下微信分享爬坑总结
Mar 29 Javascript
微信小程序云开发 搭建一个管理小程序
May 17 Javascript
微信小程序新手教程之页面打开数量限制
Mar 03 #Javascript
JS实现的冒泡排序,快速排序,插入排序算法示例
Mar 02 #Javascript
JS+php后台实现文件上传功能详解
Mar 02 #Javascript
JS事件绑定的常用方式实例总结
Mar 02 #Javascript
JS实现获取数组中最大值或最小值功能示例
Mar 02 #Javascript
JS使用队列对数组排列,基数排序算法示例
Mar 02 #Javascript
VUE引入第三方js包及调用方法讲解
Mar 01 #Javascript
You might like
DOMXML函数笔记
2006/10/09 PHP
php利用腾讯ip分享计划获取地理位置示例分享
2014/01/20 PHP
php实现的Timer页面运行时间监测类
2014/09/24 PHP
wordpress安装过程中遇到中文乱码的处理方法
2015/04/21 PHP
php实现网页缓存的工具类分享
2015/07/14 PHP
PHP基于递归算法解决兔子生兔子问题
2018/05/11 PHP
node.js中的console.log方法使用说明
2014/12/09 Javascript
纯javascript实现自动发送邮件
2015/10/21 Javascript
easyui datagrid 大数据加载效率慢,优化解决方法(推荐)
2016/11/09 Javascript
js实现简单的网页换肤效果
2017/01/18 Javascript
Javarscript中模块(module)、加载(load)与捆绑(bundle)详解
2017/05/28 Javascript
Vue高版本中一些新特性的使用详解
2018/09/25 Javascript
Node.js中读取TXT文件内容fs.readFile()用法
2018/10/10 Javascript
vue项目打包后提交到git上为什么没有dist这个文件的解决方法
2020/09/16 Javascript
用javascript实现倒计时效果
2021/02/09 Javascript
Django内容增加富文本功能的实例
2017/10/17 Python
python 解决动态的定义变量名,并给其赋值的方法(大数据处理)
2018/11/10 Python
Python 加密与解密小结
2018/12/06 Python
使用Django搭建web服务器的例子(最最正确的方式)
2019/08/29 Python
Python configparser模块常用方法解析
2020/05/22 Python
python程序如何进行保存
2020/07/03 Python
python3将变量输入的简单实例
2020/08/19 Python
Python实现曲线拟合的最小二乘法
2021/02/19 Python
AmazeUI 折叠面板的实现代码
2020/08/17 HTML / CSS
卡骆驰英国官网:Crocs英国
2019/08/22 全球购物
澳洲最大的时尚奢侈品电商平台:Cettire
2020/06/15 全球购物
Claire’s法国:时尚配饰、美容、珠宝、头发
2021/01/16 全球购物
WebSphere 应用服务器都支持哪些认证
2013/12/26 面试题
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上
2013/07/06 面试题
灵泰克Java笔试题
2016/01/09 面试题
网络编辑职责
2014/03/01 职场文书
对祖国的寄语大全
2014/04/11 职场文书
小学语文课后反思精选
2014/04/25 职场文书
2015年节能降耗工作总结
2015/05/22 职场文书
python基础学习之生成器与文件系统知识总结
2021/05/25 Python
TV动画《八十龟酱观察日记》第四季宣传PV公布
2022/04/06 日漫