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 相关文章推荐
jQuery $.data()方法使用注意细节
Dec 31 Javascript
FF IE浏览器修改标签透明度的方法
Jan 27 Javascript
js脚本分页代码分享(7种样式)
Aug 19 Javascript
mvc中form表单提交的三种方式(推荐)
Aug 10 Javascript
AngularJS递归指令实现Tree View效果示例
Nov 07 Javascript
vue.js的提示组件
Mar 02 Javascript
深入理解vue Render函数
Jul 19 Javascript
Node接收电子邮件的实例代码
Jul 21 Javascript
Vue父子组件之间的通信实例详解
Sep 28 Javascript
深入学习JavaScript中的bom
May 27 Javascript
原生JavaScript实现五子棋游戏
Nov 09 Javascript
vue解决跨域问题(推荐)
Nov 10 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函数preg_match_all正则表达式的基本使用详细解析
2013/08/31 PHP
php 从一个数组中随机的取出若干个不同的数实例
2016/12/31 PHP
JavaScript高级程序设计 事件学习笔记
2011/09/10 Javascript
window.location.href的用法(动态输出跳转)
2014/08/09 Javascript
jQuery通过控制节点实现仅在前台通过get方法完成参数传递
2015/02/02 Javascript
Javascript中拼接大量字符串的方法
2015/02/05 Javascript
jquery ezUI 双击行记录弹窗查看明细的实现方法
2016/06/01 Javascript
jQuery自定义组件(导入组件)
2016/11/08 Javascript
jQuery checkbox选中问题之prop与attr注意点分析
2016/11/15 Javascript
Ajax的概述与实现过程
2016/11/18 Javascript
Node.js环境下Koa2添加travis ci持续集成工具的方法
2017/06/19 Javascript
Node.js实现连接mysql数据库功能示例
2017/09/15 Javascript
在vue中使用SockJS实现webSocket通信的过程
2018/08/29 Javascript
angular6的table组件开发的实现示例
2018/12/26 Javascript
JS中比较两个Object数组是否相等方法实例
2019/11/11 Javascript
JS实现百度搜索框
2021/02/25 Javascript
[00:43]拉比克至宝魔导师密钥展示
2018/12/20 DOTA
python实现类的静态变量用法实例
2015/05/08 Python
Python实现数通设备端口使用情况监控实例
2015/07/15 Python
利用Python实现图书超期提醒
2016/08/02 Python
python 阶乘累加和的实例
2019/02/01 Python
python实现两个dict合并与计算操作示例
2019/07/01 Python
python GUI图形化编程wxpython的使用
2019/07/19 Python
Python基于requests库爬取网站信息
2020/03/02 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
2020/07/20 Python
通过Django Admin+HttpRunner1.5.6实现简易接口测试平台
2020/11/11 Python
基于 Python 实践感知器分类算法
2021/01/07 Python
Python3+Appium安装及Appium模拟微信登录方法详解
2021/02/16 Python
Skyscanner加拿大:全球旅行搜索平台
2018/11/19 全球购物
阿迪达斯中国官网:Adidas中国
2020/12/14 全球购物
在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern "C"
2014/08/09 面试题
中国梦演讲稿5分钟
2014/08/19 职场文书
小学班主任教育随笔
2015/08/15 职场文书
大学学习委员竞选稿
2015/11/20 职场文书
提升Nginx性能的一些建议
2021/03/31 Servers
微前端qiankun改造日渐庞大的项目教程
2022/06/21 Javascript