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 相关文章推荐
JavaScript 异步调用框架 (Part 2 - 用例设计)
Aug 03 Javascript
禁止JQuery中的load方法装载IE缓存中文件的方法
Sep 11 Javascript
阻止子元素继承父元素事件具体思路及实现
May 02 Javascript
js页面跳转的问题(跳转到父页面、最外层页面、本页面)
Aug 14 Javascript
基于jquery实现的定时显示与隐藏div广告的实现代码
Aug 22 Javascript
jquery实现类似淘宝星星评分功能有截图
Sep 15 Javascript
JavaScript 变量、作用域及内存
Apr 08 Javascript
CSS+jQuery实现简单的折叠菜单
Dec 20 Javascript
基于JS实现限时抢购倒计时间表代码
May 09 Javascript
js原生实现移动端手指滑动轮播图效果的示例
Jan 02 Javascript
vue实现自定义H5视频播放器的方法步骤
Jul 01 Javascript
VUE中setTimeout和setInterval自动销毁案例
Sep 07 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中apc缓存使用示例
2013/12/25 PHP
PHP JSON格式的中文显示问题解决方法
2015/04/09 PHP
用JavaScript实现仿Windows关机效果
2007/03/10 Javascript
用js 让图片在 div或dl里 居中,底部对齐
2008/01/21 Javascript
extjs4 treepanel动态改变行高度示例
2013/12/17 Javascript
JavaScript清空数组元素的两种方法简单比较
2015/07/10 Javascript
jquery使用ul模拟select实现表单美化的方法
2015/08/18 Javascript
AngularJS转换响应内容
2016/01/27 Javascript
JS和jQuery使用submit方法无法提交表单的原因分析及解决办法
2016/05/17 Javascript
js接收并转化Java中的数组对象的方法
2016/08/11 Javascript
bootstrap模态框示例代码分享
2017/05/17 Javascript
Node.js中使用mongoose操作mongodb数据库的方法
2017/09/12 Javascript
详解如何让Express支持async/await
2017/10/09 Javascript
在Vue组件中使用 TypeScript的方法
2018/02/28 Javascript
vue2.0模拟锚点的实例
2018/03/14 Javascript
红黑树的插入详解及Javascript实现方法示例
2018/03/26 Javascript
js限制input只能输入有效的数字(第一个不能是小数点)
2018/09/28 Javascript
nodejs更新package.json中的dependencies依赖到最新版本的方法
2018/10/10 NodeJs
python回调函数用法实例分析
2015/05/09 Python
在Python中操作字符串之rstrip()方法的使用
2015/05/19 Python
python中的计时器timeit的使用方法
2017/10/20 Python
pandas中的DataFrame按指定顺序输出所有列的方法
2018/04/10 Python
Python多线程原理与用法详解
2018/08/20 Python
python设置随机种子实例讲解
2019/09/12 Python
Django ORM filter() 的运用详解
2020/05/14 Python
推荐技术人员一款Python开源库(造数据神器)
2020/07/08 Python
世界上最大的在线学习和教学市场:Udemy
2017/11/08 全球购物
Desigual美国官方网站:西班牙服装品牌
2019/03/29 全球购物
施工安全协议书
2013/12/11 职场文书
计算机专业毕业生求职信
2014/04/30 职场文书
无私奉献演讲稿
2014/09/04 职场文书
对领导班子的意见和建议
2015/06/08 职场文书
简单聊聊Golang中defer预计算参数
2022/03/25 Golang
python实现手机推送 代码也就10行左右
2022/04/12 Python
常用的文件对应的MIME类型汇总
2022/04/26 HTML / CSS
安装harbor作为docker镜像仓库的问题
2022/06/14 Servers