mpvue 页面预加载新增preLoad生命周期的两种方式


Posted in Javascript onOctober 17, 2019

存在的必要性:mpvue开发微信小程序,在页面跳转到新页面的过程中会有200ms左右的延迟,这个200ms如果用来请求新页面的接口,那么跳转到新页面或许已经渲染好了页面。

就是两种方式:

1.新页面跳转之前,就请求新页面数据。

2.跳转到新页面后,再请求数据,可能还会有一个loading的状态。

mpvue 页面预加载新增preLoad生命周期的两种方式

第二种方式是正常的的页面跳转,不say了。

这里讲解的都是第一种方式:

从上面结构图可以看出系统跳转的延时时间可以用来请求新数据,大大提高了用户体验性。

方案是有了,该怎么实现呢。

我们知道mpvue的生命周期有onLoad mounted onShow 等。

我们自建一个preLoad生命周期进行页面预加载逻辑处理。

是不是有个疑问,怎么让程序执行我们的这个preLoad生命周期呢?

 讲解一下vue的执行机制:

 mpvue 页面预加载新增preLoad生命周期的两种方式

mpvue创建每个页面都会有个main.js文件,执行了app = new Vue(app);在项目初始化时,都会先被执行,push到一个数组里,这就是小程序页面堆栈的原理了。

 原先的页面跳转,会执行这个App中的生命周期函数。找到一点灵感有没有,我们可以在初始化时,对这个 App from './index' 的App对象进行全局储存。在跳转时同时对执行App中preLoad函数进行调用,而小程序正常执行App生命周期,

 当preLoad执行完后把数据传给App return 中的这个对象,就实现了渲染更新。

export default{
 data(){
 return {} //把数据传到这个对象上
 }  
}

  上代码:

mpvue 页面预加载新增preLoad生命周期的两种方式

两个页面,展示从joy-material 跳转到home的过程

global.js  

let $navs = { //作用收集每个页面的实例App;
};

let $router =(path,className)=>{ //每个页面实例都会有个name字段,进行$navs匹配

setTimeout(()=>{
 wx.navigateTo({
  url:path
 });
 },150);

$navs[className].preLoad(); //匹配到新页面的实例,调用preLoad函数,不影响正常跳转。
 
};
export default {
 $navs:$navs,
 $router:$router
};

joy-material index.vue

<template>
 <div class="joy-content">
 <h4 class="normal-style" hover-stay-time="100" @tap="to">{{name}}</h4>
 </div>
</template>
<script>
 import pre from "@/utils/global"
 let m = {
 name:"material",
 data(){
  return {
  name:"大苹果"
  }
 },
 mounted(){
 },
 methods :{
  to(){
  pre.$router("/pages/home/main","home"); //第二个参数是这个新页面name字段值,用来从$navs从匹配此实例。
  }
 }
 };
 pre.$navs[m.name] = m; //把实例存储到全局$navs中;
 export default m;
</script>
<style scoped lang="scss">
</style>

home index.vue

<template>
 <div>{{info}}</div>
</template>
<script>
 import pre from "@/utils/global"
 let data = {
 info:"1111"
 }
 let h = {
 name:"home",
 data(){
  return data;
 },
 mounted(){
 },
 preLoad(){
  data.info = "pppppp";
 }
 };
 pre.$navs[h.name] = h;
 export default h;
</script>
<style scoped>
</style>

总结

以上所述是小编给大家介绍的mpvue 页面预加载新增preLoad生命周期的两种方式,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
IE8对JS通过属性和数组遍历解析不一样的地方探讨
May 06 Javascript
实现只能输入数字的input不用replace方法
Sep 12 Javascript
基于jQuery倾斜打开侧边栏菜单特效代码
Sep 15 Javascript
javascript表单处理具体实现代码(表单、链接、按钮)
May 07 Javascript
AngularJs Javascript MVC 框架
Jun 20 Javascript
微信小程序 swiper制作tab切换实现附源码
Jan 21 Javascript
jQuery监听浏览器窗口大小的变化实例
Feb 07 Javascript
jQuery插件HighCharts实现气泡图效果示例【附demo源码】
Mar 13 Javascript
jquery.validate表单验证插件使用详解
Jun 21 jQuery
Vue组件创建和传值的方法
Aug 17 Javascript
使用jquery模拟a标签的click事件无法实现跳转的解决
Dec 04 jQuery
vue 项目引入echarts 添加点击事件操作
Sep 09 Javascript
JS工厂模式开发实践案例分析
Oct 17 #Javascript
小程序input数据双向绑定实现方法
Oct 17 #Javascript
mpvue实现小程序签到金币掉落动画(api实现)
Oct 17 #Javascript
JS设置自定义快捷键并实现图片上下左右移动
Oct 17 #Javascript
JavaScript 实现同时选取多个时间段的方法
Oct 17 #Javascript
Layui事件监听的实现(表单和数据表格)
Oct 17 #Javascript
浅谈Vue.set实际上是什么
Oct 17 #Javascript
You might like
简单的PHP缓存设计实现代码
2011/09/30 PHP
PHP使用DES进行加密与解密的方法详解
2013/06/06 PHP
php操作xml入门之cdata区段
2015/01/23 PHP
Yii中Model(模型)的创建及使用方法
2015/12/28 PHP
基于php编程规范(详解)
2017/08/17 PHP
PHP实现将上传图片自动缩放到指定分辨率,并保持清晰度封装类示例
2019/06/17 PHP
基于PHP实现堆排序原理及实例详解
2020/06/19 PHP
仿迅雷焦点广告效果(JQuery版)
2008/11/19 Javascript
javascript cookies 设置、读取、删除实例代码
2010/04/12 Javascript
js操作二级联动实现代码
2010/07/27 Javascript
基于javascript实现彩票随机数生成(简单版)
2020/04/17 Javascript
Vue.js使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用
2017/05/10 Javascript
jQuery实现鼠标移入移出事件切换功能示例
2018/09/06 jQuery
layer.open组件获取弹出层页面变量、函数的实例
2019/09/25 Javascript
JavaScript实现矩形块大小任意缩放
2020/08/25 Javascript
[36:33]完美世界DOTA2联赛循环赛 Matador vs Forest 第一场 11.06
2020/11/06 DOTA
python插入排序算法的实现代码
2013/11/21 Python
浅析Python中的多条件排序实现
2016/06/07 Python
同时安装Python2 &amp; Python3 cmd下版本自由选择的方法
2017/12/09 Python
pandas 按照特定顺序输出的实现代码
2018/07/10 Python
Python3的介绍、安装和命令行的认识(推荐)
2018/10/20 Python
简单了解Django ORM常用字段类型及参数配置
2020/01/07 Python
使用Python脚本从文件读取数据代码实例
2020/01/19 Python
通过css3的filter滤镜改变png图片的颜色的示例代码
2020/05/06 HTML / CSS
Omio中国:全欧洲低价大巴、火车和航班搜索和比价
2018/08/09 全球购物
戴森西班牙官网:Dyson西班牙
2020/02/04 全球购物
嘻哈珠宝品牌:KRKC&CO
2020/10/19 全球购物
武汉瑞得软件笔试题
2015/10/27 面试题
公休请假条
2014/04/11 职场文书
2014公司年终工作总结
2014/12/19 职场文书
财务人员岗位职责
2015/02/03 职场文书
MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函数的使用详解
2021/06/26 MySQL
Java实现聊天机器人完善版
2021/07/04 Java/Android
Redis安装使用RedisJSON模块的方法
2022/03/23 Redis
解决vue-router的beforeRouteUpdate不能触发
2022/04/14 Vue.js
mysql函数之截取字符串的实现
2022/08/14 MySQL