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 相关文章推荐
List the Codec Files on a Computer
Jun 18 Javascript
js中方法重载如何实现?以及函数的参数问题
Aug 01 Javascript
javascript对话框使用方法(警告框 javascript确认框 提示框)
Jan 07 Javascript
jQuery中detach()方法用法实例
Dec 25 Javascript
AngularJS中监视Scope变量以及外部调用Scope方法
Jan 23 Javascript
javascript 利用arguments实现可变长参数
Nov 21 Javascript
jquery精度计算代码 jquery指定精确小数位
Feb 06 Javascript
JavaScript输入分钟、秒倒计时技巧总结(附代码)
Aug 17 Javascript
Vue调试神器vue-devtools安装方法
Dec 12 Javascript
使用vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)功能
Mar 22 Javascript
使用layui 渲染table数据表格的实例代码
Aug 19 Javascript
js动态添加带圆圈序号列表的实例代码
Feb 18 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
单位速度在实战中的运用
2020/03/04 星际争霸
php根据某字段对多维数组进行排序的方法
2015/03/07 PHP
动态载入/删除/更新外部 JavaScript/Css 文件的代码
2010/07/03 Javascript
dotopAlert 提示用户需安装播放器的代码
2012/09/17 Javascript
javascript获取作用在元素上面的样式属性代码
2012/09/20 Javascript
js日期时间补零的小例子
2013/03/05 Javascript
jquery中常用的函数和属性详细解析
2014/03/07 Javascript
浅析基于WEB前端页面的页面内容搜索的实现思路
2014/06/10 Javascript
js设置控件的隐藏与显示的两种方法
2014/08/21 Javascript
JS实现网页背景颜色与select框中颜色同时变化的方法
2015/02/27 Javascript
使用JavaScript脚本无法直接改变Asp.net中Checkbox控件的Enable属性的解决方法
2015/09/16 Javascript
Bootstrap基本插件学习笔记之按钮(21)
2016/12/08 Javascript
jQuery实现全选、反选和不选功能
2017/08/16 jQuery
详解vue 实例方法和数据
2017/10/23 Javascript
如何安装控制器JavaScript生成插件详解
2018/10/21 Javascript
微信小程序开发实现的IP地址查询功能示例
2019/03/28 Javascript
Vue 权限控制的两种方法(路由验证)
2019/08/16 Javascript
Python采用socket模拟TCP通讯的实现方法
2014/11/19 Python
Python创建系统目录的方法
2015/03/11 Python
python之Socket网络编程详解
2016/09/29 Python
Python画柱状统计图操作示例【基于matplotlib库】
2018/07/04 Python
Python Django Cookie 简单用法解析
2019/08/13 Python
对django的User模型和四种扩展/重写方法小结
2019/08/17 Python
python3.6.5基于kerberos认证的hive和hdfs连接调用方式
2020/06/06 Python
python实现一次性封装多条sql语句(begin end)
2020/06/06 Python
pytorch Dataset,DataLoader产生自定义的训练数据案例
2021/03/03 Python
CSS3 clip-path 用法介绍详解
2018/03/01 HTML / CSS
HTML5新控件之日期和时间选择输入的实现代码
2018/09/13 HTML / CSS
详解如何用canvas画一个微笑的表情
2019/03/14 HTML / CSS
德国家具在线:Fashion For Home
2017/03/11 全球购物
TCP协议通讯的过程和步骤是什么
2015/10/18 面试题
2015年银行客户经理工作总结
2015/04/01 职场文书
惊涛骇浪观后感
2015/06/05 职场文书
《地震中的父与子》教学反思
2016/02/16 职场文书
Vue.js 带下拉选项的输入框(Textbox with Dropdown)组件
2021/04/17 Vue.js
排查MySQL生产环境索引没有效果
2022/04/11 MySQL