标签: js uni-app


前情

uni-app是我很喜欢的跨平台框架,它能开发小程序,H5,APP(安卓/iOS),对前端开发很友好,自带的IDE让开发体验也很棒,公司项目就是主推uni-app。

坑位

最近在开发一个需求,在组件中使用了onload生命周期,导致一直未生效的问题。

Why

官方文挡的介绍是像下面这样说的 文挡说明链接

uni-app 完整支持 Vue 实例的生命周期,同时还新增 应用生命周期 及 页面生命周期。

在平时开发项目中,页面和组件的写法是一模一样的,初看我以为所有组件都会有页面生命周期和vue自带的生命周期,其实不然,只能当vue组件当页面使用时,才会有页面生命周期,而且当通过导航栏的返回键返回时,页面的onHide生命周期是不会触发的,只会触发onUnload。

解决方案

在组件里使用生命周期时,使用vue自带的生命周期即可。

测试

既然踩到这坑了,那何不做个简单测试。

关键代码

// App.vue关键测试代码如下
<script>
export default {
onLaunch: function() {
console.log('App Launch')
},
onShow: function() {
console.log('App Show')
},
onHide: function() {
console.log('App Hide')
}
}
</script> // index.vue关键测试代码如下
<script>
import helloWorld from '@/components/helloWorld.vue';
export default {
components:{
helloWorld
},
data() {
return {
title: 'Hello'
}
},
onLoad() {
console.log("index onLoad");
},
onShow() {
console.log("index onShow");
},
onReady() {
console.log("index onReady");
},
onHide() {
console.log("index onHide");
},
onUnload() {
console.log("index onUnload");
},
beforeCreate() {
console.log("index beforeCreate");
},
created() {
console.log("index created");
},
beforeMount() {
console.log("index beforeMount");
},
mounted() {
console.log("index mounted");
},
beforeUpdate() {
console.log("index beforeUpdate");
},
updated() {
console.log("index updated");
},
beforeDestroy() {
console.log("index beforeDestroy");
},
destroyed() {
console.log("index destroyed");
},
methods: {
changeTitle() {
this.title += this.title;
}
}
}
</script> // 子组件helloWorld的关键测试代码如下
<script>
export default {
data() {
return {
test: "uni-app Hello Word"
};
},
onLoad() {
console.log("hellocomp onLoad");
},
onShow() {
console.log("hellocomp onShow");
},
onReady() {
console.log("hellocomp onReady");
},
onHide() {
console.log("hellocomp onHide");
},
onUnload() {
console.log("hellocomp onUnload");
},
beforeCreate() {
console.log("hellocomp beforeCreate");
},
created() {
console.log("hellocomp created");
},
beforeMount() {
console.log("hellocomp beforeMount");
},
mounted() {
console.log("hellocomp mounted");
},
beforeUpdate() {
console.log("hellocomp beforeUpdate");
},
updated() {
console.log("hellocomp updated");
},
beforeDestroy() {
console.log("hellocomp beforeDestroy");
},
destroyed() {
console.log("hellocomp destroyed");
}
}
</script>

测试结果

  • h5端打印顺序:

  • APP端打印顺序(使用的是模拟器):

  • 小程序(微信)端打印顺序:

结论

  • 作页面使用的组件即会触发uni-app的页面生命周期,也会触发vue的生命周期
  • 非页面的vue组件只会触发了属于vue的生命周期
  • 个人推荐尽量使用vue引入的生命周期,一些特殊生命周期可以使用uni-app引入的(如onload会有一些参数传入,onShow和onHide也是属于uni-app的引入的页面生命周期)

uni-app生命周期小测的更多相关文章

  1. 微信小程序APP生命周期

    小程序APP生命周期需要先从app.js这个文件开始,App() 必须在 app.js 中调用,必须调用且只能调用一次,app.js中定义了一些应用的生命周期函数 onLaunch----当小程序初始 ...

  2. 微信小程序-APP生命周期与运行机制

    QQ讨论群:785071190 开发微信小程序之前需要先了解微信小程序运行机制以及其生命周期,小程序APP生命周期需要先从app.js这个文件开始. 阅读过"微信小程序-代码构成" ...

  3. 微信APP生命周期、页面生命周期

    目录 小程序的启动流程 app生命周期 页面的生命周期 页面的生命周期(图) 小程序的启动流程 我们画一个图来表示一下,整个小程序的启动流程,我们就知道了: app生命周期 执行App()函数也就是注 ...

  4. 14 - XML、JSON、PLIST对比和APP生命周期

    XML中间的 数据表达/传输数据的语言 优点:特别强大 强大到很多平台都有基于XML的独立语言,如MXML.HTML 缺点:传输小型数据时,特别啰嗦 size / speed = time JSON ...

  5. 微信小程序生命周期——小程序的生命周期及页面的生命周期。

    最近在做微信小程序开发,也发现一些坑,分享一下自己踩过的坑. 生命周期是指一个小程序从创建到销毁的一系列过程. 在小程序中 ,通过App()来注册一个小程序 ,通过Page()来注册一个页面. 首先来 ...

  6. vue生命周期小笔记

    一张图谨记vue每个生命周期的获取状态 beforecreate :可以在这加个loading事件 created :在这结束loading,还做一些初始化,实现函数自执行 mounted : 在这发 ...

  7. vue生命周期小总结

    beforeCreate:function(){} //组件实例化之前执行的函数 created:function(){} //组件实例化完毕,但是页面没有显示 beforeMount:functio ...

  8. iOS进阶——App生命周期

    State Description Not running The app has not been launched or was running but was terminated by the ...

  9. ecos的app生命周期

    5种变迁,安装.更新.启动.暂停.卸载,每个app都可以自行维护每种变迁 方法简单,只需要在app/$app_name目录下定义task.php文件 <?php class desktop_ta ...

  10. static变量生命周期小研究

    A页面:定义一个普通类,类包含一个静态变量a,值为:111111111111111111 B页面:修改a的值为:22222222222222 C页面:用来查看a的值 1.在vs2008中,先打开B,再 ...

随机推荐

  1. 学习问题记录:RocketMQ集成到SpringBoot后,消费者无法自动进行消息消费。

    情况说明 在SpringBoot中集成了RocketMQ,实践过程中,通过RocketMQ DashBoard观察,生产者可以正常将进行消息提交:通过日志及DashBoard观察,消费者成功在Rock ...

  2. 系统编程-操作系统概论PART1

    Part1. 计算机的基本组成原理 Part2. 计算机执行原理顶层视图 Part3. 指令 指令周期 取指令和执行指令 指令格式 前面1字节是操作码,代码指令的功能,例如加法功能. 后面3字节用于寻 ...

  3. 填坑 CentOS7 使用 Python3 安装 Cython 编写扩展

    前文参见 <CentOS 7 下通过 Cython 编写 python 扩展>, 用的是 Python2.7,本文用的是 Python3.6 yum install python3 pyt ...

  4. Android内存分析命令

    一.内存指标 Item 全称 含义 等价 USS Unique Set Size 物理内存 进程独占的内存 PSS Proportional Set Size 物理内存 PSS= USS+ 按比例包含 ...

  5. TX御加固脱壳

    示例APP某小说 其实脱这个有好几个方法,我使用了两个方法都可以脱掉. 首先使用Y佬的APK测试: 上传文件后经过等待提示任务成功,把给的ZIP包下载下来. 解压后得到两个文件,txt文件是脱壳后的a ...

  6. 常见的mysql 函数 字符串函数

    1. concat (s1,s2,....sn) 字符串拼接,将 s1,s2,... sn 拼接成一个字符串 : 2. lower(str) 将字符串全部转换成小写 3. upper(str) 将字符 ...

  7. Windows刷机-记录UltraSO工具安装错误

    安装镜像刻录U盘工具UltralSO:UltraISO - ISO CD/DVD image creator, editor, burner, converter and virtual CD/DVD ...

  8. KubeSphere 社区双周报 | KubeKey v3.0.7 发布 | 2023-02-03

    KubeSphere 从诞生的第一天起便秉持着开源.开放的理念,并且以社区的方式成长,如今 KubeSphere 已经成为全球最受欢迎的开源容器平台之一.这些都离不开社区小伙伴的共同努力,你们为 Ku ...

  9. 自学PHP笔记(二) PHP数据类型

    本文转发来自:https://blog.csdn.net/KH_FC/article/details/115415323 PHP数据类型可支持以下8种类型: 类型 说明 string 字符串 bool ...

  10. 将NC栅格表示时间维度的数据提取出来的方法

      本文介绍基于Python语言,逐一读取大量.nc格式的多时相栅格文件,导出其中所具有的全部时间信息的方法.   .nc是NetCDF(Network Common Data Form)文件的扩展名 ...